zoukankan      html  css  js  c++  java
  • ImageMagick

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

  • 相关阅读:
    em与rem之间的区别以及移动设备中的rem适配方案
    关于两个DIV之间的空白字符
    Bootstrap基本模板
    js 裁剪
    记一次诡异的bug
    Node切换版本
    git 撤销
    使用 iframe + postMessage 实现跨域通信
    <el-input>标签限制输入小数点
    vue elementyUI table :点击一行时选中这一行对应的复选框
  • 原文地址:https://www.cnblogs.com/personnel/p/7979318.html
Copyright © 2011-2022 走看看