我想编写一个以 PNG 图像路径为参数的例程,并将该图像转换为 8 位 PNG 图像。我需要为此使用 PHP GD 库。
问问题
9339 次
2 回答
14
要将任何 PNG 图像转换为 8 位 PNG,请使用此函数,我刚刚创建
函数转换PNGto8bitPNG ()
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 文件的路径
笔记
我建议在运行此代码之前确保它$sourcePath
存在并且是可写的。$destPath
也许此功能不适用于某些透明图像。
用法
convertPNGto8bitPNG ('pfc.png', 'pfc8bit.png');
示例(原始 -> 8 位)
(来源: pfc.png)原始PNG图片
(目标:pfc8bit.png)转换后的 PNG 图像(8 位)
希望有人觉得这很有帮助。
于 2011-04-22T08:17:08.813 回答
10
我强烈建议不要使用 GD 库,而是使用pngquant 1.5+命令行 using exec()
orpopen()
函数。
GD 库的调色板生成代码质量很差。
与其他答案相同的图像,与 GD 库相同的文件大小,但pngquant
仅转换为 100 种颜色(甚至不是 256 种):
pngquant 很好地支持 alpha 透明度。
于 2011-12-17T18:46:18.253 回答