Colors 使用imagemagick创建的两幅图像的莫名其妙的色差(转换和蒙太奇)

Colors 使用imagemagick创建的两幅图像的莫名其妙的色差(转换和蒙太奇),colors,imagemagick,Colors,Imagemagick,我正在使用imagemagick和其他工具创建几个包含文本和图表的图像 在某种程度上,我意识到,即使相同的指令在批量使用时几乎没有变化,颜色——由十六进制值精确定义——也会随着图像的变化而变化 下面是一个示例(不需要输入文件),它在我的机器上给出了可复制的错误(或至少意外)结果(Ubuntu 14.04,ImageMagick 6.7.7-10 2017-07-31)[根据fmw42的建议编辑] convert-尺寸66x46-边框颜色“#a0a0a0”-边框2 xc:白色-重心-填充“#A0A

我正在使用imagemagick和其他工具创建几个包含文本和图表的图像

在某种程度上,我意识到,即使相同的指令在批量使用时几乎没有变化,颜色——由十六进制值精确定义——也会随着图像的变化而变化

下面是一个示例(不需要输入文件),它在我的机器上给出了可复制的错误(或至少意外)结果(Ubuntu 14.04,ImageMagick 6.7.7-10 2017-07-31)[根据fmw42的建议编辑]

convert-尺寸66x46-边框颜色“#a0a0a0”-边框2 xc:白色-重心-填充“#A0A0A0A0”-重量700-点尺寸24-注释0“0”a_1.png
转换-尺寸326x46-边框颜色“#F0”-边框2 xc:白色-重力西-填充“#000000”-重量700-点尺寸14-注释+10+0“4-氟代苯乙酮”a#2.png
蒙太奇-色彩空间sRGB a_1.png a_2.png-平铺2x1-模式连接-设置色彩空间sRGB a_3.png
转换-尺寸66x46-边框颜色“#a0a0a0”-边框2 xc:白色-重心-填充“#a0a0a0”-重量700-点尺寸24-注释0“CN”b_1.png
转换-尺寸326x46-边框颜色“#F0F0”-边框2 xc:白色-重力西-填充“#000000”-重量700-点尺寸14-注释+10+0“反式-3-二甲氨基丙烯腈”b#U 2.png
蒙太奇-色彩空间sRGB b_1.png b_2.png-平铺2x1-模式连接-设置色彩空间sRGB b_3.png
(我保留了原始文本变量,因为我无法理解是什么触发了颜色的变化,不同的渲染词会产生不同的结果)

上面的6个指令创建了以下6个图像:

a_1.png   a_2.png   a_3.png
b_1.png   b_2.png   b_3.png
如下所示:

如您所见,虽然a_1和b_1共享相同的颜色,a_2和b_2也共享相同的颜色,a_3和b_3(由a_1+a_2和b_1+b_2组合而成)具有不同的颜色!添加了显式的颜色空间规范并没有帮助

(这不是将6张图片放在一个文件中的伪影。颜色差异在单独的文件中也很明显)

原因是什么?如何在imagemagick中获得一致的颜色?当我使用视觉色码来传达信息时,我需要可以依赖的调色板


编辑:与ImageMagick 6.8.9-9 Q16 x86_64 2017-07-31相比,这不会发生(即颜色一致),遗憾的是,这不是我生产机器上的版本


我并没有排除这个问题,因为在ImageMagick 6.7.7中找到解决方案会有所帮助。或者它只是一个(已知)缺陷,因此唯一的解决方案是升级?

您的ImageMagick 6.7.7-10 2017-07-31已修补多次,最新的修补程序是2017-07-31。有报道称,该修补程序还存在其他问题。所以我怀疑它有一个坏补丁,你应该询问你的Linux发行版

请注意,光栅图像的正确Imagemagick语法是在任何设置和操作之前先读取(或创建)输入图像。因此,正确地说,您的语法应该是

convert -size 66x46 xc:White -bordercolor "#a0a0a0" -border 2  -gravity Center -fill "#a0a0a0" -weight 700 -pointsize 24 -annotate 0 "0"  a_1.png
IM 6是宽容的,所以这可能无关紧要。但我7岁的时候就不那么宽容了


在您的命令中,设置颜色空间sRGB可能是不必要的,但应该不会有任何影响。但如果使用,应在创建输入图像后正确放置。

使用Imagemagick 6.9.9.5 Q16 Mac OSX(2017-08-04)和Imagemagick 7.0.6.5 Q16 HDRI,正确的语法应为:

我6岁

我7岁

对于这两种情况,我得到:


这是正确的吗?使用“我的命令”可以获得不同的结果吗?

谢谢您对语法的建议。不过,在这种情况下,它不会影响行为(我也在问题中改变了它)。所以,从你的回答来看,我猜你认为我观察到的是一个(后来修补的)错误,而不是一个预期的行为,因为我不太了解不同的范式,对吧?是的,这是我最好的猜测,没有图像进行测试。如果你能提供你的输入和输出图像,我可以试着测试你的命令和结果。他们应该创建两个具有相同颜色和不同文本的图像(a_3.png和b_3.png)。它们在IM6.7.7上呈现不同的颜色(出乎意料),在IM6.8.9上呈现相同的颜色(如预期)您的IM6代码在6.8.9-9 Q16 x86_64 2017-08-09上运行良好,在6.7.7-10 2017-07-31 Q16上呈现不好的结果。我怀疑您的IM版本在该日期的补丁2017-07-31引入了错误。
convert  -size 66x46 xc:White -bordercolor "#a0a0a0" -border 2 -gravity Center -fill "#a0a0a0" -weight 700 -pointsize 24 -annotate 0 "0"  a_1.png
convert  -size 326x46 xc:White -bordercolor "#f0f0f0" -border 2  -gravity West -fill "#000000" -weight 700 -pointsize 14 -annotate +10+0 "4-Fluoroacetophenone"  a_2.png
montage  a_1.png a_2.png  -tile 2x1 -mode Concatenate -set colorspace sRGB a_3.png

convert  -size 66x46 xc:White -bordercolor "#a0a0a0" -border 2  -gravity Center -fill "#a0a0a0" -weight 700 -pointsize 24 -annotate 0 "CN"  b_1.png
convert  -size 326x46 xc:White -bordercolor "#f0f0f0" -border 2  -gravity West -fill "#000000" -weight 700 -pointsize 14 -annotate +10+0 "trans-3-dimethylaminoacrylonitrile"  b_2.png
montage  b_1.png b_2.png  -tile 2x1 -mode Concatenate -set colorspace sRGB b_3.png
magick  -size 66x46 xc:White -bordercolor "#a0a0a0" -border 2 -gravity Center -fill "#a0a0a0" -weight 700 -pointsize 24 -annotate 0 "0"  a_1.png
magick  -size 326x46 xc:White -bordercolor "#f0f0f0" -border 2  -gravity West -fill "#000000" -weight 700 -pointsize 14 -annotate +10+0 "4-Fluoroacetophenone"  a_2.png
magick montage  -colorspace sRGB a_1.png a_2.png  -tile 2x1 -mode Concatenate -set colorspace sRGB a_3.png

magick  -size 66x46 xc:White -bordercolor "#a0a0a0" -border 2  -gravity Center -fill "#a0a0a0" -weight 700 -pointsize 24 -annotate 0 "CN"  b_1.png
magick  -size 326x46 xc:White -bordercolor "#f0f0f0" -border 2  -gravity West -fill "#000000" -weight 700 -pointsize 14 -annotate +10+0 "trans-3-dimethylaminoacrylonitrile"  b_2.png
magick montage  -colorspace sRGB b_1.png b_2.png  -tile 2x1 -mode Concatenate -set colorspace sRGB b_3.png