首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PHP中创建真正的灰度PNG

在PHP中创建真正的灰度PNG
EN

Stack Overflow用户
提问于 2012-09-17 14:24:07
回答 1查看 4.7K关注 0票数 6

我需要在PHP中创建一个灰度图像。我说的不是带有灰度值的索引图像,而是真正的灰度图像。差别在于PNG的第26个字节(颜色类型):

代码语言:javascript
复制
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的基本代码。注释行是我尝试过的替代方案:

代码语言:javascript
复制
//$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);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-17 18:03:21

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

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

ImageMagick是你要找的东西。

代码语言:javascript
复制
$im = new Imagick();
$im->readImage('file.png');
$im->setImageType(Imagick::IMGTYPE_GRAYSCALE);
$im->writeImage('file.gray.png');
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12461373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档