Команда ImageMagick для преобразования и сохранения с тем же именем

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

Но, не могу понять, как сохранить имя изображения в преобразованном изображении.

> convert 1.JPG -resize 120X120 thumb/*.JPG

необходимо сохранить имена выходных файлов такими же, как и вход. Пожалуйста, помогите.

Ответы

Ответ 1

Простым решением будет копирование, а затем mogrify - еще один инструмент imagemagick - это будет содержать одни и те же имена, он принимает все те же аргументы, что и конвертировать.

cp *.jpg thumb/
cd thumb
mogrify -resize 120X120 *.JPG

В качестве альтернативы вы можете сделать несколько сценариев оболочки, используя find -exec или xargs

# using -exec
find . -iname "*.JPG" -maxdepth 1 -exec convert -resize 120x120 {} thumbs/{} \;

# using xargs
find . -iname "*.JPG" -maxdepth 1 | xargs -i{} convert -resize 120x120 {} thumbs/{}

Ответ 2

Другой способ:

convert *.jpg -resize 80% -set filename:f '%t' ../'%[filename:f].jpg'

Поместите преобразованные файлы в папку выше.

Параметр -set filename:f '%t' устанавливает свойство filename:f в текущее имя файла без расширения. Свойства, начинающиеся с filename:, являются специальным случаем, на который можно ссылаться в имени выходного файла. Здесь мы устанавливаем его на ../'%[filename:f].jpg, который заканчивается тем, что является именем файла изображения с расширением, замененным на .jpg в родительском каталоге.

Ссылки на документацию:

Ответ 3

Еще один простой способ, который не требует многого набора, - GNU Parallel:

parallel convert {} -resize 120X120 thumb/{} ::: *.jpg

convert вызывается для каждого из файлов, указанных после :::, а {} заменяется именем файла для каждой активации. Это также будет обрабатывать файлы параллельно, поэтому это, вероятно, намного быстрее, чем другие решения здесь.

Он также работает, если вы хотите преобразовать тип файла:

parallel convert {} {.}.png ::: *.jpg

{.} заменяется на имя файла без расширения, что позволяет легко его изменить.

Ответ 4

Вот что я делаю:

Преобразовать все файлы в filename-new.extension

for FILE in *; do convert -resize 320 $FILE $(echo $FILE | sed 's/\./-new./'); done

Переместите все файлы filename-new.extension на filename.extension:

for FILE in *; do mv $FILE $(echo $FILE | sed 's/-new//'); done