为什么我的ImageMagick使用不同于预期的效果进行色调调整?

为什么我的ImageMagick使用不同于预期的效果进行色调调整?,imagemagick,imagemagick-convert,Imagemagick,Imagemagick Convert,我找到了照片过滤器的Instagraph PHP库(,)。然而,我发现在我的盒子上,它输出的图像与Netuts上显示的图像不同。因为我对照片过滤器或ImageMagick的魔法没有进一步的了解,我需要你们的帮助,ImageMagick魔术师:-) 我对问题进行了本地化,它必须位于colortone函数中,否则过滤器工作正常。让我们以烤面包机为例,因为它只执行一次色调转换 由生成的代码(bash转义): 完成过滤器的命令序列的其余部分(这些应该是正确的): 现在,让我们看看烤面包机过滤器的预期结果

我找到了照片过滤器的Instagraph PHP库(,)。然而,我发现在我的盒子上,它输出的图像与Netuts上显示的图像不同。因为我对照片过滤器或ImageMagick的魔法没有进一步的了解,我需要你们的帮助,ImageMagick魔术师:-)

我对问题进行了本地化,它必须位于
colortone
函数中,否则过滤器工作正常。让我们以烤面包机为例,因为它只执行一次色调转换

由生成的代码(bash转义):

完成过滤器的命令序列的其余部分(这些应该是正确的):

现在,让我们看看烤面包机过滤器的预期结果:

但是,我的脚本生成以下内容:

颜色暗了很多,但我不知道为什么。解释这种行为可能只有两种选择:

  • 这个图书馆的作者的图书馆里有一个bug。(我不这么认为,但仍然有可能……)
  • 我的ImageMagick与作者的不同,因此它产生不同的结果。(这是如何发生的?)
  • 有人知道为什么我的ImageMagick会产生不同的结果吗?可能是一些初始设置吗?我的ImageMagick完全是从标准Ubuntu软件包安装的

    $ convert --version
    Version: ImageMagick 6.7.7-10 2012-08-17 Q16 http://www.imagemagick.org
    Copyright: Copyright (C) 1999-2012 ImageMagick Studio LLC
    Features: OpenMP
    

    我编译了我自己最新的ImageMagick上游版本,它产生了相同的错误输出

    $ convert --version
    Version: ImageMagick 6.8.3-9 2013-03-15 Q16 http://www.imagemagick.org
    Copyright: Copyright (C) 1999-2013 ImageMagick Studio LLC
    Features: DPC OpenMP
    Delegates: bzlib djvu mpeg fontconfig freetype jbig jng jp2 jpeg lcms lqr lzma openexr png ps tiff x xml zlib
    
    :

    英语:添加
    -设置颜色空间RGB
    ,强制图像处于线性RGB颜色空间


    感谢Instagraph的作者和在我的调查中提供的帮助。出现此问题的原因是ImageMagick在版本6.7.7-8中已经出现,并开始默认将图像视为sRGB

    Dejan开发并测试了Instagraph 6.7.5版,该版本在当时处于上游。编写过滤器时假定RGB为默认颜色空间(以前ImageMagick的默认行为)。我在ImageMagick 6.7.7-10和6.8.3-9中尝试了相同的代码,因此得到了不同的输出


    如果添加了
    -set colorspace RGB
    ,图像将转换为线性RGB,并且过滤器在设计时工作正常。另一个解决方案(可能更好)是调整colortone子过程,使其在sRGB colorspace中也能工作,但这远远超出了我目前的知识范围,所以我对此非常满意,比如说热修复。

    在调用
    self.imagemagick(…)
    之前,您能否执行
    打印命令
    ,并显示输出?我还注意到第一个字符串中的
    -composite
    后面有一个文件名,但第二个字符串中没有。
    self.imagemagick
    添加文件名。命令扩展到
    ”(-clone 0-fill-330000-colorize 100%)(-clone 0-colorspace gray-negate)-compose blend-define compose:args=100,0-composite'
    第一个字符串基本上是通过登录内部的
    self.imagemagick
    函数输出的。如果直接从shell运行imagemagick,您能获得正确的输出吗?我根据进一步的调查更改了这个问题。确切地知道哪个版本,更重要的是,作者使用的配置选项和用于上述配置选项的库版本将对您的诊断有很大帮助。请记住,Imagemagick利用了几个不同的编程库,其中任何一个都可能影响渲染输出。
    $ convert --version
    Version: ImageMagick 6.7.7-10 2012-08-17 Q16 http://www.imagemagick.org
    Copyright: Copyright (C) 1999-2012 ImageMagick Studio LLC
    Features: OpenMP
    
    $ convert --version
    Version: ImageMagick 6.8.3-9 2013-03-15 Q16 http://www.imagemagick.org
    Copyright: Copyright (C) 1999-2013 ImageMagick Studio LLC
    Features: DPC OpenMP
    Delegates: bzlib djvu mpeg fontconfig freetype jbig jng jp2 jpeg lcms lqr lzma openexr png ps tiff x xml zlib
    
    convert -set colorspace RGB test.jpg \( -clone 0 -fill '#330000' -colorize 100% \) \( -clone 0 -colorspace gray -negate \) -compose blend -define compose:args=100,0 -composite test.jpg