Подтвердить что ты не робот

Как пакетно изменить размеры изображений в Ubuntu рекурсивно в терминале?

У меня есть несколько изображений, хранящихся в наборе организованных папок. Мне нужно изменить размер этих изображений на определенный процент рекурсивно из их родительского каталога. Я запускаю Ubuntu 11.10, и мне нравится учиться, как это сделать непосредственно с терминала.

4b9b3361

Ответ 1

Вы можете использовать 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%

Ответ 2

Расширение ответа от @betabandido

Если существуют пробелы в именах файлов или именах папок, в которых находятся изображения, тогда следует использовать -print0 с find и -0 с xargs, чтобы избежать ошибок синтаксического анализа.

find . -name "*.jpg" -print0 | xargs -0 convert -resize 50%
find . -name "*.jpg" -print0 | xargs -0 mogrify -resize 50%

Ответ 3

Он также работает, если вы дадите новое разрешение размера:

convert $f.jpg -size 1024x768 $f.resized.png

Ответ 4

Вы также можете использовать

sudo apt-get install nautilus-image-converter

Но это работает только для изображения в текущей папке. Вы просто устанавливаете, а затем щелкаете правой кнопкой мыши по изображению или нескольким, и выбираете нужный размер и что он.

Я считаю, что это также использует imagemagick.

Ответ 5

Вы можете использовать инструмент 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, не поддерживая соотношение сторон в текущем каталоге.

Ответ 6

есть несколько ответов вроде:

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% $0 $(echo $0 | sed 's/\.jpg/-th\.jpg/')'

каждое соответствие find индивидуально передается xargs -n 1 на размер script: sh -c 'convert -resize 50% $0 $(echo $0 | sed 's/\.jpg/-th\.jpg/')'. Этот script получает имя файла в аргументе $0, использует sed для создания имени выходного файла путем замены исходного суффикса .jpg на -th.jpg. И он запускает команду convert с этими двумя именами файлов.

Вот версия без xargs, но find -exec:

find -name '*.jpg' -exec sh -c 'convert -resize 50% $0 $(echo $0 | sed 's/\.jpg/-th\.jpg/')' {} \;

Ответ 7

Вы можете скопировать/вставить этот код в ubuntu и сохранить его как "resize.sh"

#!/bin/bash -e

CUR_DIR = `pwd`

cd $1

#resize

для файла в *.jpg;

do

конвертировать $file -resize 50% $file;

сделать

cd $CUR_DIR

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

Для получения дополнительной информации посетите здесь