Наложение изображения именем используя ImageMagick (или аналогичных)

Я знаю, что ImageMagick в annotate команда может наложить некоторый текст на изображение, но может ли она использовать имя файла изображения в качестве этого текста? Я бы предположил, что так, но, похоже, не могу найти прямую документацию, которая подтверждает это.

несомненно, некоторая комбинация параметров может управлять этим, или есть лучший способ сделать это в скрипте?

3 ответов


ответ Эрика л. правильный -- +1 от меня за это! -- но!--2--> не дает вам больше контроля над внешним видом текста.

если вы ищете привлекательность, то лучше пойти на что-то, что использует -composite. С помощью команды IM можно сначала создать изображение наложения (которое использует полупрозрачный фон), а затем наложить его на исходное изображение.

вот пример того, как это сделать с -composite вместо -annotate, используя сценарий, который обрабатывает каждый PNG-файл в текущем каталоге. Этот даже автоматически адаптирует размер шрифта и помещает его в доступный "width * 90%" - это скрипт Bash (см. комментарии для эквивалента Win):

for img in *.png; do

   width=$(identify -format %W ${img})
   width=$(( ${width} * 9 / 10 ))

   convert                  \
     -background '#0008'    \
     -gravity center        \
     -fill white            \
     -size ${width}x100     \
      caption:"${img}"      \
      "${img}"              \
     +swap                  \
     -gravity south         \
     -composite             \
      "with-caption-${img}"

done

пример иллюстрации для одного оригинала и соответствующего вывода приведены ниже:

original imageimage with caption!

вот команда, которая использует -annotate, пытался установить несколько вещей за невыполнение параметры:

for img in so#12231624-right.png; do

   convert                   \
      "${img}"               \
     -fill red               \
     -undercolor '#0008'     \
     -pointsize 24           \
     -gravity south          \
     -annotate +0+5 "${img}" \
      "with-annotate-${img}"

done

original imageresulting image


это очень старая запись, но я нахожу ее каждый раз, когда ищу эту тему, и она не работает (для меня, по крайней мере). Вот что работает для меня:

convert input.jpg -gravity South -annotate 0 '%f' output.jpg

надеюсь, это кому-то поможет...


вы также можете использовать mogrify чтобы добавить текст в кучу изображений сразу.

mogrify -gravity South -annotate 0 '%f' -pointsize 24 -fill white  *.png

это перезапишет существующие изображения, поэтому перед выполнением этого убедитесь, что у вас есть резервная копия.