Учитывая изображение, как я могу использовать imagemagick, чтобы изменить его размер до определенного соотношения сторон? например, с соотношением сторон 2:1
Две вещи рассмотреть:
Я обращаюсь к каждому в свою очередь:
1. Простое изменение размеров с или без преобразования соотношения сторон
imagemagick
по умолчанию поддержит существующее ранее соотношение сторон изображения во время преобразований. Используя это тестовое изображение:
который удобно имеет размеры 100x100, попытка изменить размер к 300x150 с этим синтаксисом тихо перестанет работать:
convert test.png -resize 300x150 300_test.png
и произведет 150x150 изображение:
Вызвать imagemagick
для фактического создания Вашего 2:1 изображение соотношения сторон, следующий немного отличающийся синтаксис требуется:
convert test.png -resize 300x150\! distort.png
И это достигает 2:1 соотношение сторон с искажением исходного изображения, конечно:
2. Обрезка с аспектом нормирует преобразование
Если Вы предпочли бы просто и автоматически обрезали бы изображение к указанному соотношению сторон, самый легкий путь состоит в том, чтобы использовать один из Сценариев ImageMagick Fred: 'Aspectcrop'. Использование на нашем тестовом изображении просто:
./aspectcrop -a 2:1 test.png Fred_wins.png
и получающееся изображение было успешно обрезано к 2:1 отношение:
Другая опция, которой будут управлять, -g gravity
который определяет, какая часть изображения используется для обрезки. Значение по умолчанию является центром, все опции:
Таким образом дать пример этого использования на север:
./aspectcrop -a 2:1 -g n test.png north.png
Результаты:
Если бы необходимо было использовать этот сценарий для пакетной загрузки изображений в единственном каталоге, то Вы могли использовать удар 'для' цикла. Первое место сценарий правильно и набор это к исполняемому файлу:
sudo mv aspectcrop /usr/local/bin
sudo chmod +x /usr/local/bin/aspectcrop
Это делает намного легче использовать сценарий. Затем работайте 'за' циклом из каталога изображений:
for i in *.png
do
aspectcrop -a 2:1 -g n "$i" "${i%.png}_cropped.png"
done
Этот цикл может варьироваться согласно типу входных и выходных файлов, различные местоположения и т.д. Вы могли также произвести подобный синтаксис, который будет искать рекурсивно изображения. Много возможностей...
Я думаю, что это все довольно прохладно :)
Ссылки:
Вот сценарий для всего jpg в папке для проверки 4:3 аспект.
#!/bin/sh
EXTENSION="*.jpg"
for file in $EXTENSION
do
currAspect=$(identify -format "%[fx:w/h]" "$file")
roundFloat=$(printf '%.*f\n' 3 "$currAspect")
if [ $roundFloat != 1.333 ]
then
echo "name: $file aspect: $currAspect rounded: $roundFl$
fi
done