LINUX.ORG.RU

imagemagick_пакетное добавление водяных знаков к картинкам с указанием имени папки

 


1

1

Задача сделать для пользователя скрипт, который позволит одним действием добавлять ко всем картинкам, находящимся в одной папке несколько водяных знаков, один из которых включает в себя наименование директории, в которой лежат эти картинки. Сейчас код скрипта выглядит так, нижний водяной знак статично выводит DirName, как сделать так, чтобы вместо этого он выводил Произвольный текст + имя папки, в которой обрабатываются изображения?

#!/bin/bash

savedir="_originals"
mkdir $savedir

if [ $? -ne 0 ] ; then
  echo "Ошибка: не удалось создать $savedir."
  exit 1
fi

for image in *png *jpg *gif
do
 if [ -s $image ] ; then   # ненулевой размер файла
	 
    width=$(identify -format %w $image)
    convert -background '#0008' -fill white -gravity center \
       -size ${width}x100 caption:Address \
       $image +swap -gravity North -composite new1-$image
       
	convert -background '#0008' -fill white -gravity center \
       -size ${width}x100 caption: DirName \
       new1-$image +swap -gravity South -composite new2-$image
      
     mv $image $savedir
	 rm new1-$image
     mv new2-$image $image
    echo "На изображение $image успешно нанесен водяной знак"
  fi
done

mkdir $savedir

if [ $? -ne 0 ] ; then
  echo "Ошибка: не удалось создать $savedir."
  exit 1
fi
#!/bin/bash
set -euo pipefail

die() {
  echo "$@" >&2
  exit 1
}

if [ ! $(mkdir -p "$savedir" &> /dev/null) ]; then 
  die "Не могу создать..." 
fi

А касаемо остального, то там размер шрифта должен зависить от размера картинки

uwuwuu
()
Ответ на: комментарий от uwuwuu

Не понимаю, как мне это поможет?

Вопрос в том,что вставить вместо DirName в этом куске, чтобы на картинку вставлялась подпись с именем текущей директории?

convert -background '#0008' -fill white -gravity center \
-size ${width}x100 caption:DirName \
new1-$image +swap -gravity South -composite new2-$image
luu
() автор топика
Ответ на: комментарий от uwuwuu

Вставлять «водяные знаки» у меня получается, вопрос был немного в другом. В любом случае, задача была решена путем сбора отдельной текстовой переменной и подстановки ее в подпись. Сейчас возник вопрос, как вместо «_» выводить в надпись обычные пробелы

#!/bin/bash

savedir="_originals"
mkdir $savedir

# echo "${PWD##*/}"
str="Произвольный_текст_"
dirname=$(echo "${PWD##*/}")
dirstr="${str}${dirname}"
# echo $dirstr


if [ $? -ne 0 ] ; then
  echo "Ошибка: не удалось создать $savedir."
  exit 1
fi

for image in *png *jpg *gif
do
 if [ -s $image ] ; then   # ненулевой размер файла
	 
    width=$(identify -format %w $image)
    convert -background '#0008' -fill white -gravity center \
       -size ${width}x100 caption:Address \
       $image +swap -gravity North -composite new1-$image
       
	convert -background '#0008' -fill white -gravity center \
       -size ${width}x100 caption:$dirstr \
       new1-$image +swap -gravity South -composite new2-$image
      
     mv $image $savedir
	 rm new1-$image
     mv new2-$image $image
    echo "На изображение $image успешно нанесен водяной знак"
  fi
done
luu
() автор топика
Ответ на: комментарий от luu
~
❯ arr=("foo" "bar" "baz")

~
❯ python -c "import sys;print(sys.argv)" -- ${arr[*]}  
['-c', '--', 'foo', 'bar', 'baz']

~
❯ python -c "import sys;print(sys.argv)" -- "${arr[*]}"
['-c', '--', 'foo bar baz']

~
❯ python -c "import sys;print(sys.argv)" -- "${arr[@]}"
['-c', '--', 'foo', 'bar', 'baz']

~
❯ python -c "import sys;print(sys.argv)" -- "foo "bar" baz"
['-c', '--', 'foo bar baz']

~
❯ python -c "import sys;print(sys.argv)" -- prop:"foo bar baz"
['-c', '--', 'prop:foo bar baz']
uwuwuu
()
Последнее исправление: uwuwuu (всего исправлений: 1)