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

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

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


person Lunatik    schedule 05.11.2010    source источник


Ответы (4)


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

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

Вот пример того, как это сделать с -composite вместо -annotate, используя скриптовый подход, который обрабатывает каждый файл PNG в текущем каталоге. Этот даже автоматически адаптирует размер шрифта и вписывает его в доступную «ширину * 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

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

исходное изображениеизображение с подписью!

Вот команда, которая использует -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

исходное изображениерезультирующее изображение

person Kurt Pfeifle    schedule 05.10.2012
comment
Это для Баша, да. В Windows/DOS синтаксис будет примерно таким, как for %i in (*.png) do convert ..... Здесь нет финального "done" и нет точки с запятой после части for. - person Kurt Pfeifle; 20.03.2013
comment
Спасибо, я действительно решил эту командную строку bash, которая существует в моих окнах из-за Git. - person Serguzest; 20.03.2013
comment
Это хорошо сработало для меня. cd в папку с изображениями (все PNG будут аннотированы, поэтому сделайте резервные копии), затем: mogrify -gravity southwest -annotate +20+16 '%t' -font ArialUnicode -pointsize 24 -fill '#ff0000' *.png SouthWest дает вам размещение в нижнем левом углу. +20+16 дополняет текст на 20 пикселей от края по оси X и на 16 пикселей от края по оси Y. Что касается шрифтов, вот как проверить, какой те, которые вы можете использовать, и добавить больше, и, наконец, различные способы указания цвета - person Mentalist; 26.07.2019
comment
Еще одна деталь: '%t' и '%f' указывают, что имя файла изображения должно использоваться для текста аннотации. '%t' пропустит расширение файла, а '%f' включит его. (В Windows их нужно экранировать дополнительным %, например: '%%t') - person Mentalist; 26.07.2019

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

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

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

person Eric L.    schedule 03.10.2012
comment
Как бы вы указали здесь конкретные символы имени файла? Допустим, я хотел добавить первые 3 символа имени файла. Как мне сделать os '%f'{0:2}? - person Charles Clayton; 17.11.2014
comment
Я читал, что '%f' для Mac, а '%%f' для Windows, может поэтому у вас сначала не работало? - person Mentalist; 26.07.2019

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

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

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

person Marcin    schedule 22.06.2017

Основываясь на решении Стива Четти, похоже, что вы можете установить размер текста и цвет аннотации, используя -pointsize и -fill соответственно.

Вот пример:

convert input.jpg -gravity south -pointsize 24 -fill yellow -annotate 0 '%f' output.jpg

Очевидно, вы можете изменить размер текста с 24 пунктов на что-то другое, а также цвет с «желтого» на какой-либо другой цвет, в соответствии с вашими предпочтениями.

person Gino    schedule 04.03.2019
comment
Вы также можете повернуть текст, используя -annotate. Просто измените 0 на 15x15 для поворота на 15 градусов. - person fmw42; 04.03.2019