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

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

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

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

#!/bin/bash

while read p; do
  convert $p
done < listofimages
1
задан 26 May 2015 в 19:43

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>] гарантирует, что только отображает, чей размер больше, чем 1 024 пикселя будут изменены.

2
ответ дан 26 May 2015 в 19:43

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

#!/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

Объяснение:

  • "определить" команда производит все виды информации об изображении. Третье поле является размером в формате "1024x968".
  • , команда "сокращения" захватывает третье поле, разграниченное пробелами.
  • команда "sed" удаляет высоту, оставляя ширину.
  • , "если" только обрабатывает изображения, ширина которых больше, чем 1 024.
  • Наконец, преобразуйте, повторно масштабирует изображение. Это автоматически сохраняет соотношение сторон.

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

% reaspect `cat file`
0
ответ дан 26 May 2015 в 19:43

Другие вопросы по тегам:

Похожие вопросы: