我需要在 PHP 中创建灰度图像。我不是在谈论在其调色板中具有灰度值的索引图像,而是在谈论 TRUE 灰度图像。不同之处在于 PNG 的第 26 个字节(颜色类型):
0 - greyscale <-- THIS IS WHAT I NEED
2 - RGB
3 - RGB with palette
4 - greyscale + alpha
6 - RGB + alpha
(有关详细信息,请参阅如何检查 PNG 的灰度/alpha 颜色类型?)
我也试过imagefilter($im, IMG_FILTER_GRAYSCALE);
了,imagetruecolortopalette($im, false, 255);
但我得到的只是 RGB 灰度图像(颜色类型 2)或带有灰度调色板的 RGB 调色板图像(颜色类型 3)。我也尝试使用imagecreate()
而不是初始化图像,imagecreatetruecolor()
但这只会导致调色板图像。
有没有办法使用 PHP 的 GD 函数(或 PHP 中的任何其他函数)创建颜色类型 0 灰度 PNG?
这里有一些不同灰度图像的样本来说明我的意思。它们看起来都一样,但是如果您在 PhotoShop 中打开它们并查看图像 -> 模式设置,您会发现不同之处。此外,十六进制编辑器将显示第 26 个字节的差异:
RGB,颜色类型2,3149 字节
RGB 调色板,颜色类型3,3971 字节
真灰度图像,颜色类型0,1105 字节 <-- 这就是我需要的
更新 01:
这是我用来创建 PNG 的基本代码。注释行是我尝试过的替代方法:
//$im = imagecreate($image_size, $image_size);
$im = imagecreatetruecolor($image_size, $image_size);
//imagefilter($im, IMG_FILTER_GRAYSCALE);
//imagetruecolortopalette($im, false, 255);
imagepng($im, $imgPathName);
imagedestroy($im);