使用ImageMagick在特定位置添加文本到图像中

58

我希望在图片的特定位置添加文本,并使其居中对齐。我该如何指定从顶部的边距?我想要指定从顶部以像素/英寸为单位的边距。

目前我正在使用以下命令:

 convert temp.jpg -gravity Center  -pointsize 30 -annotate 0 'Love you mom' temp1.jpg 

这是将文本写在图像中心。我希望文本移动到顶部。

现在的效果是这样的: enter image description here

我想要的效果是这样的: enter image description here

4个回答

59

尝试使用-gravity North(这将把您的文本移动到图像顶部),然后添加偏移量(-annotate +0+100)来向下移动您的文本:

convert temp.jpg -gravity North -pointsize 30 -annotate +0+100 'Love you mom' temp1.jpg 

24

相反,您可以使用-draw指定文本的位置。

例如:

convert -font helvetica -fill white -pointsize 60 -gravity center -draw "text 0,300 'TEXT TO BE DISPLAYED'" /image_address/Image_input.png /image_address/Image_output.png 
在这种情况下,0是x坐标,300是y坐标,但是由于重心已经在那里,因此x坐标并不重要。

请记住,坐标0,0是左上角。


6
值得注意的是,"-font <param>" 可以接受指向 ".ttf" 文件的完整路径作为参数。 - artfulrobot

11
convert -pointsize 40 -fill blue -draw 'text 600,600 "Love You Mom"' temp1.jpg temp2.jpg
                                              ^   ^
                                              |   |
                                        From Left |
                                                From Top

5
欢迎来到Stack Overflow!虽然这段代码可能解决了问题,但是包括一个说明关于如何以及为什么解决这个问题,会真正有助于提高你的帖子质量,并可能获得更多的赞。请记住,你回答的是未来的读者,而不仅仅是现在提问的人。请 [编辑] 你的答案以添加说明并给出适用的限制和假设。 - rizerphe
1
唯一直截了当的答案。甚至可以妥协为-draw 'text X, Y "爱你,妈妈"' - Paul

0

有几种方法可以在图像上添加文本。以下是使用Magick.NETC#的答案:

使用Annotate()函数:
image.Annotate(someText, new MagickGeometry(x, y, width, height), Gravity.Center)

使用Composite函数和new MagickImage("caption:...")功能的组合。您可以在另一张图片上覆盖一张图片。您可以创建一个文本标题图像,该图像将放置在原始图像的顶部:
MagickReadSettings readSettings = new MagickReadSettings()
{
   Font = someFont,
   Width = 868,
   Height = 180,
   TextGravity = Gravity.North
};
using (var overlayImage = new MagickImage("caption:" + someText, readSettings))
{
    originalImage.Composite(overlayImage, Gravity.South, x, y);
}

使用DrawableText,您可以在图像上的任何位置绘制文本:
DrawableTextAlignment centerAligned = new DrawableTextAlignment(TextAlignment.Center);
DrawableText drawableText = new DrawableText(x, y, someText);
image.Draw(drawableText, centerAligned);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接