У меня есть файл с полным путем к изображению в каждой строке, все в формате jpg. Я хочу изменить размер каждого изображения / строки в файле до 1024 пикселей в ширину, сохраняя при этом соотношение сторон для высоты. Я просто хочу перезаписать исходный файл.
Основная проблема, с которой я столкнулся, это то, что я хочу только УЖАТЬ. Я не хочу увеличивать изображения размером менее 1024 пикселей в ширину до 1024 пикселей в ширину.
Вот сценарий bash, с которым я работаю, и мне просто нужна помощь со строкой convert, так как у меня нет опыта работы с imagemagick.
#!/bin/bash
while read p; do
convert $p
done < listofimages
Это должно сделать это:
#!/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>]
гарантирует, что только отображает, чей размер больше, чем 1 024 пикселя будут изменены.
Попробуйте что-то вроде этого:
#!/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
Объяснение:
, Если Вы имеете имена файлов в файле и называете вышеупомянутый сценарий "переаспектом", можно использовать это:
% reaspect `cat file`