我正在尝试使用ImageMagick向图像添加文本。我看到了多个使用draw,label,caption,annotate等的示例。 两者之间有什么区别? 我可以使用CLI测试上述命令的结果,但是在尝试使用IM4java由java运行时遇到了麻烦。 有关Java代码段的任何帮助将非常有用。
答案 0 :(得分:3)
这就是我的看法-这很自以为是,欢迎其他人来编辑和添加他们的见识。
label:
像其他包含冒号(:
)的运算符一样,例如gradient:
,xc:
,logo:
,label:
运算符会生成自己的画布。这意味着您不必在现有图像上绘制/键入文本,而只需在文本上绘制/键入文本,它就会为该文本创建背景。
如果事先指定-size
,它将创建一个大小合适的画布,并将文本放在适合的最大磅数上。因此,让我们尝试一个固定的宽尺寸:
convert -background black -fill white -gravity center -size 800x100 label:'Stack Overflow' text.png
还有固定的狭窄尺寸
convert -background black -fill white -gravity center -size 100x100 label:'Stack Overflow' text.png
如果您事先未指定-size
,它将以您要求的磅值创建文本并将其放在适当大小的画布上。因此,让我们尝试一个没有画布大小的小磅值:
convert -background black -fill white -gravity center -pointsize 16 label:'Stack Overflow' text.png
还有一个没有画布大小的大磅字号:
convert -background black -fill white -gravity center -pointsize 64 label:'Stack Overflow' text.png
您还可以仅指定宽度,而不指定高度,例如-size 200x
,或者仅高度而不是宽度,例如-size x50
,它将使用最大字体,但只能限制在您指定的尺寸上。
以下内容应使您了解可以影响文本的哪些属性:
convert -background black -fill yellow -strokewidth 2 -stroke magenta \
-undercolor blue -size 400x100 -gravity center -font 'AppleChancery' label:'Stack Overflow' text.png
caption:
类似于label:
,但它也进行自动换行,因此它将一个长长的句子跨多行显示给您自己。
pango:
是一种类似于HTML的相当复杂的标记语言,可让您在句子中期更改字体,颜色,粗体,斜体,下标,上标和其他文本功能。
-draw "text 10,10 'Your message'"
在某种程度上已被弃用,但是它允许您在特定位置绘制现有图像,例如上面显示的10,10
。请注意,它没有冒号(:
),因此您需要已经有图像/画布才能插入。
-annotate
确实取代了-draw
。像-draw
一样,您需要已经可以在其上绘制的画布/图像,但是与-draw
相比,它允许您更轻松地定位,剪切和旋转文本。
安东尼·蒂森(Anthony Thyssen)对所有这些事情进行了精彩的讨论,更多内容here。