分享

php 色彩空间转换,PHP Imagemagick将灰度转换为RGB

 qdongh 2022-05-11

我制作了一个工具,人们可以上传照片并对其进行修改(包括去饱和),从而生成灰度图像.

我使用PHP的GD库生成最终图像.

当打印这些图像时,颜色显示错误,因此使用Image Magick我添加了颜色配置文件.

除已灰度处理的图像外,这非常有用.添加了颜色配置文件,但是当我在Photoshop中打开图像时,它显示“无法使用嵌入式ICC配置文件,因为ICC配置文件无效.忽略该配置文件”.

在Photoshop中,图像设置为灰度而不是RGB,因此附加的RGB配置文件是错误的.我需要它是RGB.

我正在使用以下代码来添加所有可能的信息,以使图像变为RGB:

$i = new Imagick();

$i->readimage('image.jpg');

$i->setimagetype(Imagick::IMGTYPE_TRUECOLOR);

$i->setimagecolorspace(Imagick::COLORSPACE_RGB);

$i->profileimage('icc', file_get_contents('AdobeRGB1998.icc'));

$i->writeimage($d);

$i->destroy();

?>

有谁知道如何成功将图像设置为RGB并附加配置文件?

我确实尝试过’setImageProfile’和’profileImage’的不同方法和组合,也适用于色彩空间和图像类型,但是结果始终相同.

解决方法:

@ a34z在评论中说:

“Somehow I must let PS know it is an RGB image with only grey pixels in it or something like that.”

假设RGB图像甚至可能包含“灰色”像素是一个根本的错误!

RGB图像确实具有始终由三种颜色混合而成的像素:R ed green re.这是3个可用频道,仅此而已. RGB中没有灰色通道.

使得RGB图像在我们眼中看起来是灰色的是,这3个数字通道值中的每一个均等于或小于严格来讲,至少“足够相似”.当然,还有软件可以分析3个通道的颜色值,并告诉您哪些像素为“灰色”. ImageMagick的直方图输出会愉快地告诉您要说的是哪种灰度,并为这些Gray使用不同的名称.但是不要被该颜色名称所迷惑:像素仍将由强度相同(或非常相似)的3种颜色组成,ImageMagick还将报告这些值.

如果确实需要纯灰度图像(仅使用一个通道获得灰度,而不是三个通道),则必须将其转换为这种图像类型.

这两个图像可能看起来仍然相同(如果转换正确完成,并且显示器已校准,并且不是红绿盲),但是它们的内部文件结构不同.

RGB图像需要处理RGB(如果有)的ICC配置文件,例如sRGB.对于灰度,您不能使用sRGB,可能需要在其中使用DeviceGray或其他功能.

标签:imagemagick,color-profile,php

来源: https:///bug/20191101/1981582.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多