Как пакетное изменение размера изображений в Ubuntu рекурсивно в терминале?
У меня есть несколько изображений, хранящихся в совокупность упорядоченных папках. Мне нужно изменить размер этих изображений на определенный процент рекурсивно от родительского каталога. Я запускаю Ubuntu 11.10, и я предпочитаю учиться делать это непосредственно с терминала.
7 ответов
можно использовать imagemagick. Например, для изменения размера всех JPG-изображений в текущем каталоге до 50% от их исходного размера вы можете сделать:
for f in `find . -name "*.jpg"`
do
convert $f -resize 50% $f.resized.jpg
done
полученные файлы будут иметь ".jpg " дважды в их названиях. Если это проблема, вы можете проверить следующие альтернативы.
для просмотра/поиска файлов для изменения размера, вы можете использовать xargs тоже. Пример:
find . -name "*.jpg" | xargs convert -resize 50%
Это создаст копии изображений. Если вы просто хотите преобразовать их на месте, вы можете использовать:
find . -name "*.jpg" | xargs mogrify -resize 50%
расширение ответа от @betabandido
Если в именах файлов или имен папок есть пробелы, в которых находятся изображения, то следует использовать-print0 с find и -0 с xargs, чтобы избежать ошибок синтаксического анализа.
find . -name "*.jpg" -print0 | xargs -0 convert -resize 50%
find . -name "*.jpg" -print0 | xargs -0 mogrify -resize 50%
Это также работает, если вы даете новое разрешение размер :
convert $f.jpg -size 1024x768 $f.resized.png
вы также можете использовать
sudo apt-get install nautilus-image-converter
но это работает только для изображения в текущей папке. Вы просто устанавливаете, а затем щелкните правой кнопкой мыши на изображении или нескольких и выберите нужный размер, и все.
Я считаю, что это также использует imagemagick.
Вы можете использовать инструмент ImageMagick для пакетного изменения размера.
Он будет поддерживать соотношение сторон
$ convert dragon.gif -resize 64x64 resize_dragon.gif
Он не будет поддерживать соотношение сторон
$ convert dragon.gif -resize 64x64\! exact_dragon.gif
$ cat resize.sh
#!/bin/bash
for f in `find . -name "*.jpg"`
do
convert $f -resize 45x60\! $f.resize.jpg
done
он изменит размер изображения до 45x60 без сохранения соотношения сторон в текущем каталоге.
есть несколько ответов, таких как:
find . -name "*.jpg" | xargs convert -resize 50%
это не будет работать, поскольку он расширит список следующим образом:
convert -resize 50% a.jpg b.jpg c.jpg
какой будет размер a.jpg
на c-0.jpg
, b.jpg
на c-1.jpg
и пусть c.jpg
нетронутым.
таким образом, вы должны выполнить команду resize для каждого матча и дать как имя входного файла, так и имя выходного файла с чем-то вроде:
find . -name "*.jpg" | xargs -n 1 sh -c 'convert -resize 50% $(echo | sed 's/\.jpg/-th\.jpg/')'
каждый матч find
индивидуально передается xargs -n 1
на изменить скрипт: sh -c 'convert -resize 50% $(echo | sed 's/\.jpg/-th\.jpg/')'
.
Этот скрипт получает имя файла в аргументе , используется
sed
чтобы сделать имя выходного файла путем замены исходного .jpg
суффикс с помощью -th.jpg
один.
И он работает С этими двумя именами файлов.
вот версия без xargs
но find -exec
:
find -name '*.jpg' -exec sh -c 'convert -resize 50% $(echo | sed 's/\.jpg/-th\.jpg/')' {} \;
вы можете скопировать / вставить этот код в ubuntu и сохранить его как "resize.sh"
#!/ bin / bash-e
CUR_DIR= 'pwd'
компакт-диска 1$
#размер
для файл в *.формат JPG;
do
convert $file-изменение размера 50% $file;
сделал
компакт-диск $CUR_DIR