2013-03-12 50 views
3

我发现Instagraph PHP库(GitHub,NetTuts)用于照片过滤器。但是,我发现在我的盒子上它不会输出与NetTuts上显示的图像相同的图像。因为我对图片过滤器或ImageMagick的魔法没有进一步的了解,所以我需要ImageMagick魔术师的帮助:-)为什么我的ImageMagick以不同于预期的结果执行colortoning?

我本地化了这个问题,它必须在colortone函数内,因为否则过滤器工作正常。我们以烤面包机作为展示,因为它只执行一个colortone转换。 (bash的转义)由colortone PHP function产生

代码:

convert test.jpg \(-clone 0 -fill '#330000' -colorize 100% \) \(-clone 0 -colorspace gray -negate \) -compose blend -define compose:args=100,0 -composite test.jpg 

命令来完成过滤器的序列的其余部分(那些应该没事吧):

convert test.jpg -modulate 150,80,100 -gamma 1.2 -contrast -contrast test.jpg 
convert test.jpg \(-size 960.0x960.0 radial-gradient:none-LavenderBlush3 -gravity center -crop 640x640+0+0 +repage \) -compose multiply -flatten test.jpg 
convert test.jpg \(-size 960.0x960.0 radial-gradient:#ff9966-none -gravity center -crop 640x640+0+0 +repage \) -compose multiply -flatten test.jpg 

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

enter image description here

然而,我的脚本如下产生

enter image description here

这是一个很大暗,但我不知道为什么。可能只有两个选项来解释此类行为:

  1. 库的作者在他的库中有一个错误。 (我不这么认为,但仍然有可能...)
  2. 我的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 
+0

你可以在调用'self.imagemagick(...)'之前做一个'print commands'并显示输出结果吗?我还注意到,在第一个字符串中“-composite”后面有一个文件名,但第二个字符串中没有。 – Claudiu 2013-03-12 14:17:02

+0

'self.imagemagick'添加文件名。命令展开为''(-clone 0 -fill#330000 -colorize 100%)(-clone 0 -colorspace gray -negate)-compose blend -define compose:args = 100,0 -composite''第一个字符串基本上是输出从'self.imagemagick'函数中记录。 – 2013-03-12 15:24:04

+0

如果你直接从shell运行imagemagick,你能得到正确的输出吗? – Claudiu 2013-03-12 17:08:18

回答

3

Solution

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 

英文:添加-set colorspace RGB迫使图像是线性的RGB色彩。


感谢guys from ImageMagick forumDejan Marjanovic,在我的调查帮助Instagraph的作者。该问题出现在ImageMagick changed behavior版本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色彩空间中工作,但这远远超出了我当前的知识范围,所以我对此很满意,比如修补程序

相关问题