6

我需要在 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 个字节的差异:

RGBRGB,颜色类型2,3149 字节
RGB 调色板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);
4

1 回答 1

6

GD 库不支持转换为“真实”灰度。它仅支持 RGB 和 TrueColor*。

有没有办法使用 PHP 的 GD 函数(或 PHP 中的任何其他函数)创建颜色类型 0 灰度 PNG?

ImageMagick是您正在寻找的。

$im = new Imagick();
$im->readImage('file.png');
$im->setImageType(Imagick::IMGTYPE_GRAYSCALE);
$im->writeImage('file.gray.png');
于 2012-09-17T18:03:21.780 回答