相对于图像角

时间:2015-08-05 19:55:39

标签: imagemagick imagemagick-convert

我编写了以下脚本,该脚本使用ImageMagick * convert实用程序将轴标签附加到现有图像。

LEFT_="l -30,0 +2,+2  -6,-2 +6,-2  -2,+2 z"
RIGHT_="l 30,0 -2,+2  +6,-2 -6,-2  +2,+2 z"
convert -size 240x160 pattern:SMALLFISHSCALES \
  -pointsize 16 -fill black -background white \
  -gravity SouthEast -splice 0x20 \
  -draw "translate 40,0 text 0,0 'Time' stroke red path 'm 5,2 $RIGHT_'" \
  -gravity NorthWest -splice 20x0 \
  -draw "rotate +90 translate 40,-10 text 0,0 'Value' path 'm -5,2 $LEFT_'" \
  example.png

产生以下图像:

convert command output

这几乎就是我所追求的,除了红色箭头不合适。我希望红色箭头出现在Time标签旁边,因为它的起始点被指定为同一个绘图命令中的相对位置。不幸的是,看起来-gravity选项影响text原语,但不影响path原语。

在指定红色箭头的起始位置时,有没有办法引用SouthEast角落或Time文本标签?我无法使用绝对坐标,因为图像的大小会有所不同。

* CentOS 7上的ImageMagick 6.7.8-9

1 个答案:

答案 0 :(得分:1)

更新了答案

也许你可以制作像这样的Unicode文字箭头然后它们会受到重力的影响...

perl -e 'binmode(STDOUT,":utf8"); print "Time ... \x{2192}\x{2191}";'|
     convert -font TimesNewRoman -pointsize 36 label:@- arrows.png

enter image description here

根据您的操作系统,以下内容可能会替代上面的Perl ......

printf "%b" "\u2192" | convert ...

原始答案

我对路径并不熟悉,但我可以建议一种方法来实现你想要的根本不使用重力的方法,也许这会有所帮助。

您可以克隆原始图像并将其裁剪为您计划拼接的尺寸,然后-splice标记轴的条带,而不是使用-append。向你展示命令比解释它更容易!

convert -size 240x160 pattern:SMALLFISHSCALES            \
   \( +clone -crop x20+0+0 -fill blue -colorize 100% \)  \
  -append                                                \
  \( +clone -crop 20x+0+0 -fill red -colorize 100% \)    \
  +swap +append result.png

我已经填充了x轴蓝色,但删除了它并添加了你需要的任何标签和箭头,我将y轴填充为红色,但同样删除它并添加标签和箭头 - 根据需要旋转。

需要注意两件棘手的事情......

-append会将第二张图片追加到第一张

+append会将第二张图片附加到第一张图片的右侧,所以事先我+swap将它放在左侧。

enter image description here