text - ImageMagick最适合矩形内的文本?

标签 text dynamic imagemagick centering best-fit

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

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

现在,我想使用ImageMagick渲染一些文本,以便恰好适合矩形

如果字符串很短(窄),则矩形的高度将成为限制因素:

另一方面,如果使用长(宽)字符串,则矩形的宽度将决定大小:

无论哪种情况,无论文本是多长还是短,我都希望将其打印在一行中(即不换行或多行),并使其完全适合矩形,并确保其居中(中心的文字位于矩形的中心)。

我的问题:

  • 如何使用ImageMagick做到这一“最合适”功能(我不知道如何为此动态确定所需的-pointsize)
  • 如何使文本居中,当我使用-gravity center时,它似乎适用于整个图像中文本的位置,即文本坐标相对于整个图像的中心。但是我想指定精确的(绝对)坐标,并且该坐标应该是文本的中心。

  • 例如,如果我这样做:
    convert test.jpg -font Arial -fill yellow \
     -pointsize 65 -draw "text 398,90 'Hello'" test2.jpg
    

    我越来越:

    请注意,我指定的坐标(矩形的中心)如何成为文本的左下 anchor ! (这让我感到惊讶)

    如果我这样做:
    convert test.jpg -font Arial -fill yellow \
     -pointsize 65 -gravity center -draw "text 148,-94 'Hello'" test3.jpg
    

    我得到:

    挺好的,但是请注意我必须使用奇怪的文本坐标才能做到这一点。此外,我不知道如何自动计算点数(上面是通过反复试验得出的结果)。

    最佳答案

    更新了答案

    根据我现在所收集的内容,我认为这可能是您的最佳选择。

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

    enter image description here

    和这个:
    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
    

    enter image description here

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

    原始答案

    如果希望ImageMagick尽其所能以使文本适合给定框中的内容,则应使用caption而不是annotatelabel-draw "text"

    因此,您想加载海图,设置标题的大小,绘制标题,然后使用-geometry在正确的位置将其合成到图像上:
    convert sea.jpg -size 173x50! caption:"Your text" -geometry +312+66 -composite result.png
    

    enter image description here

    或者,使用更长的文字:
    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
    

    enter image description here

    如果您希望背景为空白,请在-background none之前使用caption:
    convert sea.jpg -size 173x50! -background none caption:"Your text" -geometry +312+66 -composite result.png
    

    enter image description here

    如果您想将文本居中,则可以使用PANGO这样操作,但是我相信您会放弃自动调整大小功能:
    convert sea.jpg -size 173x50! -background none -gravity center pango:'<span foreground="yellow">ABC</span>' -gravity northwest -geometry +312+66 -composite result.png
    

    enter image description here

    关于text - ImageMagick最适合矩形内的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39764846/

    相关文章:

    mysql - 为给定字符串搜索数据库的好算法

    文本的 HTML 和 css 位置无法更改

    javascript - jQuery 动态生成范围 slider

    php - 从mysql查询动态创建表

    node.js - Node gm 水印和调整大小

    android - 如何在用户触摸时使用TextView的getSelectionStart和getSelectionEnd?

    MySQL 文本或 VARCHAR

    c - 动态地为可变大小的结构数组分配空间

    batch-file - 在 ImageMagick 中计算颜色

    imagemagick - 使用 ImageMagick 裁剪总是产生 1x1 图像