我想编写一个例程,它将PNG图像路径作为参数,并将该图像转换为8位PNG图像。我需要使用PHP GD库。
答案 0 :(得分:12)
要将任何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);
}
我建议在运行此代码之前确保$sourcePath
存在且$destPath
可写。也许这个功能不适用于某些透明图像。
convertPNGto8bitPNG ('pfc.png', 'pfc8bit.png');
(来源:pfc.png)原始PNG图片
(目的地:pfc8bit.png)转换后的PNG图像(8位)
希望有人觉得这很有帮助。
答案 1 :(得分:8)
我强烈建议您使用exec()
或popen()
函数来使用pngquant 1.5+命令行,而不是GD库。
GD库的调色板生成代码质量很差。
与其他答案中的图像相同,文件大小与GD库相同,但使用pngquant
转换为仅100种颜色(甚至不是256种):
pngquant非常支持alpha透明度。