【发布时间】:2012-09-09 19:03:30
【问题描述】:
我需要在 PHP 中创建灰度图像。我不是在谈论在其调色板中具有灰度值的索引图像,而是在谈论 TRUE 灰度图像。区别在于PNG的第26个字节(颜色类型):
0 - greyscale <-- THIS IS WHAT I NEED
2 - RGB
3 - RGB with palette
4 - greyscale + alpha
6 - RGB + alpha
(详见How to check a PNG for grayscale/alpha color type?)
我尝试了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 字节
True灰度图像,颜色类型 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);
【问题讨论】:
-
到目前为止你的代码看起来怎么样?
-
@Breezer:请参阅我的 OP 中的“更新 01”。
-
用 imagecolorallocate 定义要使用的颜色,基本上是调色板
-
对不起,Breezer,但你已经走了。正如我明确指出的,我不想创建调色板图像,而是 8 位灰度图像。它与调色板无关。它类似于 RGB 图像,但只有一个颜色通道而不是三个通道。
标签: php png rgb grayscale gdlib