imagemagick обрезать изображения с определенным соотношением сторон?

Учитывая изображение, как я могу использовать imagemagick, чтобы изменить его размер до определенного соотношения сторон? например, с соотношением сторон 2:1

7
задан 25 April 2016 в 22:56

2 ответа

Две вещи рассмотреть:

  1. Простое изменение размеров с или без преобразования соотношения сторон
  2. Обрезка с аспектом нормирует преобразование

Я обращаюсь к каждому в свою очередь:

1. Простое изменение размеров с или без преобразования соотношения сторон

imagemagick по умолчанию поддержит существующее ранее соотношение сторон изображения во время преобразований. Используя это тестовое изображение:

enter image description here

который удобно имеет размеры 100x100, попытка изменить размер к 300x150 с этим синтаксисом тихо перестанет работать:

convert test.png -resize 300x150 300_test.png

и произведет 150x150 изображение:

enter image description here

Вызвать imagemagickдля фактического создания Вашего 2:1 изображение соотношения сторон, следующий немного отличающийся синтаксис требуется:

convert test.png -resize 300x150\! distort.png

И это достигает 2:1 соотношение сторон с искажением исходного изображения, конечно:

enter image description here

2. Обрезка с аспектом нормирует преобразование

Если Вы предпочли бы просто и автоматически обрезали бы изображение к указанному соотношению сторон, самый легкий путь состоит в том, чтобы использовать один из Сценариев ImageMagick Fred: 'Aspectcrop'. Использование на нашем тестовом изображении просто:

./aspectcrop -a 2:1 test.png Fred_wins.png

и получающееся изображение было успешно обрезано к 2:1 отношение:

enter image description here

Другая опция, которой будут управлять, -g gravity который определяет, какая часть изображения используется для обрезки. Значение по умолчанию является центром, все опции:

  1. центр (c)
  2. север (n)
  3. юг (юг)
  4. восток (e)
  5. запад (w)
  6. северо-запад (на СЗ)
  7. северо-восток (ne)
  8. юго-западный, (коротковолновый)
  9. юго-восток (se)

Таким образом дать пример этого использования на север:

./aspectcrop -a 2:1 -g n test.png north.png

Результаты:

enter image description here

Если бы необходимо было использовать этот сценарий для пакетной загрузки изображений в единственном каталоге, то Вы могли использовать удар 'для' цикла. Первое место сценарий правильно и набор это к исполняемому файлу:

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

Этот цикл может варьироваться согласно типу входных и выходных файлов, различные местоположения и т.д. Вы могли также произвести подобный синтаксис, который будет искать рекурсивно изображения. Много возможностей...

Я думаю, что это все довольно прохладно :)

Ссылки:

9
ответ дан 26 April 2016 в 08:56
  • 1
    Хорошо. Я изучу процедуру и попытку. Не простая вещь мне. – Matías Fernández 23 September 2017 в 15:10

Вот сценарий для всего 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
0
ответ дан 29 September 2019 в 17:37

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

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