Как я могу использовать конвертирование, чтобы изменить размеры изображений до определенной ширины, сохраняя соотношение высоты?
У меня есть файл с полным путем к изображению в каждой строке, все это 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`