3

Недавно я узнал о команде конвертирования из imagemagick, которую я использовал для сжатия многих изображений, которые у меня есть для личного использования, и для моего блога. По моему опыту, Imagemagick - лучшая программа для сжатия изображений, и она дает самый полный контроль над тем, как сжимать изображения. У меня есть еще много изображений, которые я хочу сжать, но не хочу использовать команду конвертирования так много раз, по одному для каждого файла. Основная проблема в том, что это занимает очень много времени. Я хотел бы иметь возможность одним крупным способом сжать мои изображения. Я в порядке с этим через командную строку, но графический интерфейс может сделать это немного более интуитивно понятным.

Вот пример команды, которую я использую, чтобы сделать исходное изображение на 20% от исходного размера. конвертировать-изменить размер 20% 20140322_102113.jpg 20140322_102113opt.jpg

Если я скажу, что у меня есть 100 изображений, и все они находятся в одной папке, я хочу иметь возможность сделать что-то вроде следующего

Для всех изображений конвертировать - изменить размер 20% imagename.jpg imagename_optimized.jpg

Я не знаю, есть ли команда, которая уже может сделать это, но если нет, я думал о создании команды bash, но я не очень знаком с bash. Помощь в создании этого простого скрипта bash или советы о том, как решить мою дилемму, приветствуется. Я использую Linux и хотел бы получить решение специально для Linux. Спасибо

4 ответа4

5

Именование - это немного другой формат, но:

for img in *.jpg; do
  convert -resize 20% "$img" "opt-$img"
done
3

Использование цикла for определенно сработает - и это хорошая общая методика - но у вас почти наверняка есть более 1 процессора на вашей машине, так зачем делать только одно преобразование за раз?

Вы можете сделать вещи намного быстрее, если вы делаете:

find *.jpg | xargs -n1 -P8 -I{} convert -resize 20% "{}" "opt-{}"

Аргументы для xargs:

n1  - Only give 'convert' one file at a time
P8  - Use 8 processes
I{} - Replace {} with the filename given by 'find'

А затем дается команда преобразования.

-1

Я думаю, что простой скрипт Bash может помочь вам.

for i in `ls /path/to/img/dir`; do convert -resize 20% "/path/to/img/dir/${i:0:-4}" "/path/to/new/img/dir/${i:0:-4}_optimized.jpg"; done

Примечание: ${i:0:-4} предназначен для удаления расширения .jpg . Если ваш файл имеет разную длину расширения, вы можете изменить -4 на другое :)

-1

Попробуйте с for i in $( ls *.jpg); do convert -resize 20% $i optimized_$i; done (Вы можете установить путь к папке, отличной от *.jpg)

В качестве графического интерфейса вы можете использовать Converseen

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .