今天在处理一张 gray.jpg 图片时,发现生成的图片色彩空间是: GRAYColorspace
可我在代码中明明设置了:
MagickWand * mw = NewMagickWand ();
MagickReadImage (mw, "gray.jpg"); MagickSetImageType (mw, TrueColorType);
MagickSetImageColorspace (mw, sRGBColorspace); MagickSetImageFormat(mw, "JPEG");
MagickWriteImage (mw, "gray-rgb.jpg")
为什么生成的图片(gray-rgb.jpg),色彩空间还是:GRAYColorspace
如果使用 convert.exe 就可以:
convert gray.jpg -type truecolor gray-rgb.jpg
生成的 gray-rgb.jpg ,色彩空间:sRGBColorspace
经过半天的google,基本上找到原因:
ImageMagick 内部编码器会根据当前的图片颜色数量,智能的优化,如果符合 GRAYColorspace,就自动设置为 GRAYColorspace,就算在代码中强制设置:
MagickSetImageType (mw, TrueColorType);
MagickSetImageColorspace (mw, sRGBColorspace);
都没有用!!!
后面又找到这个:http://www.imagemagick.org/script/command-line-options.php#define
其中提到通过下面的设置,来解决这个 ImageMagick 智能的选择 GRAYColorspace 的问题 :
MagickSetOption(magick_wand, "colorspace:auto-grayscale", "off");
或
MagickSetImageProperty (magick_wand, "colorspace:auto-grayscale", "off");
可我尝试了一下,发现没效果。
可能是我用的 ImageMagick 版本有点低, 6.8.9版。
网上提到的是 6.9.2+ 版可能才支持这个功能。
我去,这就难办了,因为 ImageMagick 如果升级到最新版,有很多地方的代码需要修改,实在不想改动。
ImageMagick 这个处理方式有点让人接受不了, 开发者对此可操作的空间都没有了。