Как я могу использовать конвертирование, чтобы изменить размеры изображений до определенной ширины, сохраняя соотношение высоты?

У меня есть файл с полным путем к изображению в каждой строке, все это JPG. Я хочу изменить размер каждого изображения / строки в файле до 1024 пикселей по ширине, сохраняя соотношение сторон для высоты. Я просто хочу перезаписать оригинальный файл.

Главное, с чем у меня проблемы - я хочу только СЖИГАТЬ. Я не хочу увеличивать изображения размером менее 1024 пикселей по ширине до 1024 пикселей по ширине.

Вот скрипт bash, с которым я работаю, и мне просто нужна помощь со строкой конвертации, так как у меня нет опыта работы с imagemagick.

#!/bin/bash

while read p; do
  convert $p
done < listofimages

2 ответа

Решение

Это должно сделать это:

#!/bin/bash

while IFS= read -r jpg
do
    convert "$jpg""[1024x>]" "$jpg"
done < "$1"

Сохраните скрипт выше как ~/bin/shrink.shсделать его исполняемым (chmod a+x ~/bin/shrink.sh) и запустите его, указав в качестве аргумента список файлов:

shrink.sh /path/to/list

По сути, это то же самое, что предложенный дубликат, адаптированный для того, чтобы i) соответствовать желаемому размеру и ii) считывать имена из файла. [1024x>] гарантирует, что будут изменены только изображения, размер которых превышает 1024 пикселя.

Попробуйте что-то вроде этого:

#!/bin/bash

for p in "$@"
do
    w=`identify "$p" | cut -f 3 -d ' ' | sed 's/x.*//'`
    if [ $w -gt 1024 ]
    then
        convert -scale 1024x1024 "$p" "$p"
    fi
done

Объяснение:

  • Команда "Identify" производит все виды информации об изображении. Третье поле - размер в формате "1024x968".
  • Команда "вырезать" захватывает третье поле, разделенное пробелами.
  • Команда "sed" удаляет высоту, оставляя ширину.
  • "Если" обрабатывает только изображения, ширина которых превышает 1024.
  • Наконец, преобразуйте масштабирует изображение. Он автоматически сохраняет соотношение сторон.

Если у вас есть имена файлов в файле и имя вышеупомянутого скрипта "reaspect", вы можете использовать это:

% reaspect `cat file`
Другие вопросы по тегам