Команда 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