Я хочу написать рутину, которая принимает PNG путь изображения как параметр и преобразовать это изображение в 8-битное изображение PNG. Для этого мне нужно использовать библиотеку PHP GD.
Для преобразования любого PNG-изображения в 8-битный PNG используйте эту функцию, я только что создал
function convertPNGto8bitPNG($sourcePath, $destPath) { $srcimage = imagecreatefrompng($sourcePath); list($width, $height) = getimagesize($sourcePath); $img = imagecreatetruecolor($width, $height); $bga = imagecolorallocatealpha($img, 0, 0, 0, 127); imagecolortransparent($img, $bga); imagefill($img, 0, 0, $bga); imagecopy($img, $srcimage, 0, 0, 0, 0, $width, $height); imagetruecolortopalette($img, false, 255); imagesavealpha($img, true); imagepng($img, $destPath); imagedestroy($img); }
convertPNGto8bitPNG('pfc.png', 'pfc8bit.png');
(Источник: pfc.png) ОРИГИНАЛЬНОЕ ИЗОБРАЖЕНИЕ PNG
(Назначение: pfc8bit.png) КОНВЕРТИРОВАННОЕ ИЗОБРАЖЕНИЕ PNG (8 бит)
Надеюсь это поможет.
Вместо библиотеки GD я настоятельно рекомендую использовать командную строку pngquant 1.5+, используя функции exec()
или popen()
.
В библиотеке GD имеется код генерации палитры низкого качества.
Такое же изображение, как в другом ответе, тот же размер файла, что и библиотека GD, но преобразованный с использованием pngquant
в 100 цветов (даже не 256):
pngquant поддерживает альфа-прозрачность очень хорошо.