为什么我的 PNG 图像的颜色配置文件/空间在使用 Perl 的 Image::Magick 处理时会发生变化?



我在ImageMagick(使用Perlmagick:我打开PNG图片,调整它并保存它(时遇到了一些令人困惑的行为。

都很好,除了结果图像颜色略有不同。

  • 原始图像
  • 处理的图像
# Create the ImageMagick object.
my $magick = Image::Magick->new;
eval {
    $magick->BlobToImage( $image );
};
$magick->Scale( ... );
# ...and then save it.

但是,如果我手动将图像的颜色空间设置为" RGB",请在保存之前,图像是相似的颜色;

$magick->Colorspace( colorspace => 'RGB' );

为什么这是?

编辑:如果我做完全相同,除了手动设置颜色空间,在保存之前转换为jpeg,颜色会变得正确。更令人困惑。: -/

使用Image::Magick以PNG格式保存图像时,通过将gm identify -verbose modified.png的输出与gm identify -verbose original.png的输出进行比较,添加了GAMA块,可以看到:

$ fc Original.info modified.info***** Original.info      标准偏差:18869.16(0.2879(  文件大小:613.0KI  交叉:不*****修改      标准偏差:18869.16(0.2879(  伽玛:0.45455  色度:    红主:(0.64,0.33(    绿色初选:(0.3,0.6(    蓝主:(0.15,0.06(    白点:( 0.3127,0.329(  文件大小:614.2KI  交叉:不***** 

文件中的RGB颜色 values 在文件中相同,但是第二个文件中保存的伽马校正信息使其与原始显示的显示略有不同。这就是为什么将图像转换为JPG"解决"问题的原因:它删除了伽马校正信息。

查看ImageMagick源代码,使用:

实现剥离
SetImageArtifact(image,"png:exclude-chunk",
     "bKGD,cHRM,EXIF,gAMA,iCCP,iTXt,sRGB,tEXt,zCCP,zTXt,date");

因此,我推荐OP尝试:

 $magick->Set(option => "png:exclude-chunk=gAMA");

在他的Perl计划中,OP报告了解决问题。

相关信息:

  • libpng docs

  • 修复PNG伽玛

  • PNG伽玛"更正"的悲伤故事

  • 为什么此PNG图像在Chrome&Firefox比Safari和IE?

最新更新