Skip to content
MagickCmd › ImageMagick 图片添加文字

ImageMagick 图片添加文字

用 ImageMagick 把文字烧进图片。用 -gravity 和 -annotate 定位、加投影保证可读、选字体,以及中文显示成方框的解决办法。

有两个参数能画文字:-annotate-draw。用 -annotate —— 它支持 -gravity,意味着你不需要知道图片尺寸就能把文字定位到某条边上。

一行基础说明文字

magick input.jpg -gravity south -pointsize 48 -fill white \
  -annotate +0+28 'Your caption here' output.jpg

设了 -gravity south 之后,偏移 +0+28 表示从底边向内 28 像素、水平居中。换个 gravity,同样的偏移就是从另一条边算起。

在任何底图上都看得清的文字

白字在明亮天空上会消失,黑字在阴影里会消失。把文字画两遍 —— 先画偏移一像素的深色,再在上面画真正的颜色:

magick input.jpg -gravity southeast -pointsize 42 \
  -fill black -annotate +26+22 '© 2026 Your Name' \
  -fill white -annotate +24+24 '© 2026 Your Name' output.jpg

成本很低,比猜一个颜色靠谱得多。另一种做法是在文字后面加一块半透明底:

magick input.jpg -gravity south -pointsize 36 \
  -undercolor '#00000080' -fill white -annotate +0+24 'Caption' output.jpg

-undercolor 支持 8 位十六进制,最后两位就是透明度。

选字体

magick -list font

这会打印 ImageMagick 认识的所有字体。可以用字体族名,也可以直接给字体文件的完整路径:

magick input.jpg -font DejaVu-Sans-Bold -pointsize 48 \
  -fill white -gravity center -annotate 0 'Hello' output.jpg

如果列表是空的

说明缺少 fontconfig 组件,或者机器上根本没装字体。精简版 Docker 镜像里非常常见。装一个:

apt install fonts-dejavu-core

中文显示成方框怎么办

字体加载是成功的,只是它没有这些字符的字形。默认字体只覆盖拉丁字母,所以中文、日文、韩文、阿拉伯文和 emoji 全都会显示成方框。用完整路径指定一个覆盖这些字形的字体:

apt install fonts-noto-cjk

magick input.jpg \
  -font /usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc \
  -pointsize 48 -fill white -gravity south -annotate +0+40 '你好世界' output.jpg

查找覆盖中文的字体:

fc-list :lang=zh

让文字大小跟着图片走

固定的 -pointsize 在 4000 像素的照片上小得看不见,在缩略图上又大得离谱。要么在脚本里算,要么让 ImageMagick 把文字自动适配到一个框里:

magick input.jpg -gravity south -size 1000x120 \
  -background none -fill white label:'Fitted caption' \
  -composite output.jpg

label: 会自动选一个刚好装得进给定 -size 的字号。

生成一张纯文字图片

magick -background none -fill '#0d9488' -pointsize 96 \
  label:'MagickCmd' output.png

相关页面

Copied