我在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,颜色变得正确。更令人费解的是。 : - /
答案 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报告说它解决了这个问题。
相关信息: