使用imagemagick(转换+蒙太奇)

时间:2017-08-08 15:24:57

标签: colors imagemagick

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

在某些时候我意识到,即使批量使用相同的指令而几乎没有变化,颜色 - 由十六进制值精确定义 - 从图像变为图像!

这是一个示例(不需要输入文件),可以在我的机器上产生可重现的错误(或至少是意外的)结果(Ubuntu 14.04,ImageMagick 6.7.7-10 2017-07-31)[根据fmw42'的建议]

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

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

(我已经离开了原始文本变量,因为我无法理解是什么触发了颜色的变化,而不同的渲染单词会产生不同的结果)

上面的6个结构创建了这6个图像:

a_1.png   a_2.png   a_3.png
b_1.png   b_2.png   b_3.png

看起来像这样:

enter image description here

如您所见,虽然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中找到解决方案会有所帮助。或者它只是一个(已知的)错误,所以唯一的解决方案是升级?

2 个答案:

答案 0 :(得分:1)

你的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是宽容的,所以它可能无关紧要。但IM 7并不宽容。

-set colorspace sRGB在你的命令中可能是不必要的,但不应该受到伤害。但如果使用,应在创建输入图像后正确放置。

答案 1 :(得分:0)

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

IM 6

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

IM 7

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

对于我得到的两个:

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

这是对的吗?你用我的命令得到了不同的东西吗?