Наложение имени файла изображения с помощью ImageMagick (или аналогичного)

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

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

Ответ 1

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

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

Вот пример, как это сделать с -composite вместо -annotate, используя сценарий, который обрабатывает каждый PNG файл в текущем каталоге. Он даже автоматически адаптирует размер шрифта и вписывает его в доступную "ширину 90%" - это Bash script (см. Комментарии для эквивалента 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 image  ! image 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

Ответ 2

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

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

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

Ответ 3

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

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

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