7

我有这样的图像,在特定坐标处有一个矩形:

图片

(出于说明的目的,我将矩形的坐标及其大小和中心放在那里)

现在我想用 ImageMagick 渲染一些文本,使它完全适合矩形

如果它是一个非常短(窄)的字符串,矩形的高度将是限制因素:

短字符串

另一方面,对于长(宽)字符串,矩形的宽度将决定大小:

长串

在任何一种情况下,无论文本有多短或多长,我都想在一行中打印它(即没有自动换行或多行),并让它完全适合矩形,并确保它居中(中心的文本位于矩形的中心)。

我的问题:

  1. 如何使用 ImageMagick 执行此“最适合”功能(我不知道如何动态确定所需-pointsize的)

  2. 如何使文本居中,当我使用-gravity center它时,它似乎适用于整个图像中文本的位置,即文本坐标相对于整个图像的中心。但我想指定精确(绝对)坐标,那应该是文本的中心。

例如,如果我这样做:

convert test.jpg -font Arial -fill yellow \
 -pointsize 65 -draw "text 398,90 'Hello'" test2.jpg

我越来越:

错误的

请注意我指定的坐标(矩形的中心)如何成为文本的左下角锚点!(这让我很惊讶)

如果我这样做:

convert test.jpg -font Arial -fill yellow \
 -pointsize 65 -gravity center -draw "text 148,-94 'Hello'" test3.jpg

我得到:

好的

这还不错,但请注意我必须使用奇怪的文本坐标来获得它。此外,我不知道如何自动计算点大小(通过反复试验完成上述操作)。

4

1 回答 1

11

更新的答案

根据我现在收集的信息,我认为这可能是您最好的选择。

convert sea.jpg \( -size 173x50 -background none label:"A" -trim -gravity center -extent 173x50 \) -gravity northwest -geometry +312+66 -composite result.png

在此处输入图像描述

和这个:

convert sea.jpg \( -size 173x50 -background none label:"A very much longer label" -trim -gravity center -extent 173x50 \) -gravity northwest -geometry +312+66 -composite result.png

在此处输入图像描述

基本上,我在括号中使用了一些“辅助处理”来生成文本,然后将其合成到页面上。我生成具有label:最佳自动大小的文本,然后修剪文本周围的任何多余空间。然后,我将修剪后的文本居中,使用-gravity center并展开背景(使用-extent),以便文本框始终保持相同大小,然后我可以-geometry在将其相对于左上角合成时定位它(使用 ),因为我重置-gravityNorthWest.

原始答案

如果您希望 ImageMagick 尽最大努力使您的文本适合给定的框中,您应该使用caption而不是annotatelabel-draw "text"

所以你想加载你的海洋图像,设置标题的大小,绘制标题并将其合成到正确位置的图像上,使用-geometry

convert sea.jpg -size 173x50! caption:"Your text" -geometry +312+66 -composite result.png

在此处输入图像描述

或者,使用更长的文本:

convert sea.jpg -size 173x50! caption:"A considerably longer text that will result in a smaller font being chosen" -geometry +312+66 -composite result.png

在此处输入图像描述


如果您想要空白背景,请使用-background nonebeforecaption:

convert sea.jpg -size 173x50! -background none caption:"Your text" -geometry +312+66 -composite result.png

在此处输入图像描述


如果您想将文本居中,您可以使用 PANGO 来做到这一点,就像这样,但我相信您会放弃自动调整大小功能:

convert sea.jpg -size 173x50! -background none -gravity center pango:'<span foreground="yellow">ABC</span>' -gravity northwest -geometry +312+66 -composite result.png

在此处输入图像描述

于 2016-09-29T09:07:21.503 回答