Как преобразовать PNG в 8-битный PNG с помощью библиотеки PHP GD

Я хочу написать рутину, которая принимает PNG путь изображения как параметр и преобразовать это изображение в 8-битное изображение PNG. Для этого мне нужно использовать библиотеку PHP GD.

Related of "Как преобразовать PNG в 8-битный PNG с помощью библиотеки PHP GD"

Для преобразования любого PNG-изображения в 8-битный PNG используйте эту функцию, я только что создал

функция convertPNGto8bitPNG ()

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); } 

параметры

  • $ sourcePath – путь к исходному файлу PNG
  • $ destPath – путь к файлу PNG

Применение

 convertPNGto8bitPNG('pfc.png', 'pfc8bit.png'); 

Пример (оригинал -> 8-бит)

(Источник: pfc.png) ОРИГИНАЛЬНОЕ ИЗОБРАЖЕНИЕ PNG

введите описание изображения здесь

(Назначение: pfc8bit.png) КОНВЕРТИРОВАННОЕ ИЗОБРАЖЕНИЕ PNG (8 бит)

введите описание изображения здесь


Примечание. Я не пробовал эту функцию с прозрачными изображениями. Думаю, это работает, но я не уверен на 100%.

Надеюсь это поможет.

Вместо библиотеки GD я настоятельно рекомендую использовать командную строку pngquant 1.5+, используя функции exec() или popen() .

В библиотеке GD имеется код генерации палитры низкого качества.

Такое же изображение, как в другом ответе, тот же размер файла, что и библиотека GD, но преобразованный с использованием pngquant в 100 цветов (даже не 256):

введите описание изображения здесь

pngquant поддерживает альфа-прозрачность очень хорошо.