我正在尝试使用ImageMagick将文本添加到图像。我看到了多个使用draw,label,caption,annotate等的示例。
两者之间有什么区别?
我可以使用CLI测试上述命令的结果,但是在尝试使用IM4java由java运行时遇到了麻烦。
Java代码段的任何帮助将非常有用。
最佳答案
这是我的看法-颇为自以为是,欢迎其他人来编辑和添加他们的见解。label:
像其他包含冒号(:
)的运算符一样,例如gradient:
,xc:
,logo:
,label:
运算符生成其自己的 Canvas 。这意味着您不必在现有图像上绘制/键入文本,而只是在文本上绘制/键入文本,它会为要放置的文本创建背景。
如果事先指定-size
,它将创建一个具有该大小的 Canvas ,并将文本放在适合的最大磅数上。因此,让我们尝试一个固定的宽尺寸:
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
,它将以您要求的磅值创建文本并将其放在适当大小的 Canvas 上。因此,让我们尝试一个没有 Canvas 大小的小磅值:convert -background black -fill white -gravity center -pointsize 16 label:'Stack Overflow' text.png
还有一个没有 Canvas 大小的大磅字号:
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
。请注意,它没有冒号(:
),因此您已经需要一个图像/ Canvas 才能将其绘制到其中。-annotate
确实取代了-draw
。像-draw
一样,您需要已经有一个 Canvas /图像可以在其上绘制,但是与-draw
相比,它允许您更轻松地定位,剪切和旋转文本。安东尼·蒂森(Anthony Thyssen)对所有这些内容进行了精彩的讨论,并提供了更多here。
关于text - 向ImageMagick添加文本时标题,绘制,注释,标签之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55469545/