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

时间:2017-05-04 13:57:52

标签: perl imagemagick

我在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,颜色变得正确。更令人费解的是。 : - /

1 个答案:

答案 0 :(得分:2)

使用Image::Magick以PNG格式保存图片时,可以通过将gAMA chunk的输出与gm identify -verbose original.png的输出进行比较来添加gm identify -verbose modified.png

$ fc original.info modified.info
***** original.info
      Standard Deviation:      18869.16 (0.2879)
  Filesize: 613.0Ki
  Interlace: No
***** MODIFIED.INFO
      Standard Deviation:      18869.16 (0.2879)
  Gamma: 0.45455
  Chromaticity:
    red primary: (0.64,0.33)
    green primary: (0.3,0.6)
    blue primary: (0.15,0.06)
    white point: (0.3127,0.329)
  Filesize: 614.2Ki
  Interlace: No
*****

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

查看ImageMagick source code,使用以下方法实现剥离:

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报告说它解决了这个问题。

相关信息: