Команда ImageMagick для преобразования и сохранения с тем же именем - PullRequest
23 голосов
/ 03 апреля 2012

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

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

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

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

Ответы [ 4 ]

23 голосов
/ 29 января 2015

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

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

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

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

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

23 голосов
/ 03 апреля 2012

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

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/{}
5 голосов
/ 27 сентября 2015

Другой простой способ, который не требует большого набора текста, - GNU Parallel :

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

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

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

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

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

2 голосов
/ 03 июля 2014

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

Преобразование всех файлов в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...