我编写了以下脚本,该脚本使用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
产生以下图像:
这几乎就是我所追求的,除了红色箭头不合适。我希望红色箭头出现在Time
标签旁边,因为它的起始点被指定为同一个绘图命令中的相对位置。不幸的是,看起来-gravity
选项影响text
原语,但不影响path
原语。
在指定红色箭头的起始位置时,有没有办法引用SouthEast角落或Time
文本标签?我无法使用绝对坐标,因为图像的大小会有所不同。
* CentOS 7上的ImageMagick 6.7.8-9
答案 0 :(得分:1)
更新了答案
也许你可以制作像这样的Unicode文字箭头然后它们会受到重力的影响...
perl -e 'binmode(STDOUT,":utf8"); print "Time ... \x{2192}\x{2191}";'|
convert -font TimesNewRoman -pointsize 36 label:@- arrows.png
根据您的操作系统,以下内容可能会替代上面的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
将它放在左侧。