今天在处理一张 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 这个处理方式有点让人接受不了, 开发者对此可操作的空间都没有了。

05-11 22:59