gpt4 book ai didi

php - 在 PHP 中创建一个真正的灰度 PNG

转载 作者:可可西里 更新时间:2023-11-01 13:21:28 27 4
gpt4 key购买 nike

我需要在 PHP 中创建一个灰度图像。我不是在谈论在其调色板中具有灰度值的索引图像,而是在谈论真正的灰度图像。区别在于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 RGB,颜色类型 2,3149 字节
RGB palette RGB 调色板,颜色类型 3,3971 字节
True Grayscale Image 真灰度图像,颜色类型 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);

最佳答案

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

Is there any way to create a color type 0 grayscale PNG with PHP's GD functions (or any other functions in PHP)?

ImageMagick正是您要找的。

$im = new Imagick();
$im->readImage('file.png');
$im->setImageType(Imagick::IMGTYPE_GRAYSCALE);
$im->writeImage('file.gray.png');

关于php - 在 PHP 中创建一个真正的灰度 PNG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12461373/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com