Как пакетное изменение размера изображений в 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

после сохранения этого файла запустите его с терминала с помощью". /rotate.sh folder_containing_images"

для таких вещей, посетите здесь