В ImageMagick, как я могу масштабировать изображение вниз достаточно, чтобы оно обрезалось до определенных размеров?

Например, если у меня есть большое изображение размером 1600x1200, но я хочу создать миниатюру размером 250x200 (разное соотношение высоты и ширины) - как я могу масштабировать ее до размера, а затем центрировать ее? Возможно ли это в одной строке с помощью convert?

Ответ 1

Уменьшить масштаб + заполнить заданную область (и при необходимости растянуть выходное изображение)

Если вы хотите уменьшить масштаб до 250x200 пикселей (без сохранения пропорций), полностью заполняя пространство 250x200 (при необходимости растягивая/искажая изображение), используйте:

  convert            \
     input.jpeg      \
    -scale 250x200\! \
     output1.png

(Обратите внимание на символы \! после настройки геометрии шкалы!)
Замените суффиксы .jpeg и .png любыми суффиксами формата, которые у вас есть и хотите, ImageMagick автоматически обработает его.


Масштабировать вниз + поместить результат в область выделения (и сохранить пропорции, а при необходимости - отказаться от некоторой области)

Если вы хотите уменьшить масштаб до 250x200 пикселей, сохраняя соотношение сторон (отношение высоты к ширине) исходного изображения и обрезая его размер 250 × 200 пикселей, который не используется, используйте:

  convert          \
     input.jpeg    \
    -scale 250x200 \
     output2.png

По умолчанию ширина и высота, заданные в аргументе -resize, являются максимальными значениями (если вы не указали их как процент). Это означает: выходные изображения расширяются или сжимаются, чтобы соответствовать указанным размерам, сохраняя соотношение сторон изображения.

Эта команда выше "пытается" установить размеры 250x200:

  • Когда высота уменьшается до 200 пикселей от первоначальных 1200 пикселей (до 16,6666% от этого исходного значения), ширина теперь составляет 266,66 пикселей. Так что он еще не подходит....

  • Когда ширина уменьшилась до 250 пикселей от первоначальных 1600 пикселей (до 15,625% от этого исходного значения), высота теперь составляет 187,5 пикселей. Таким образом, он подходит теперь и может оставить над пространством сверху и снизу.

Таким образом, окончательное измерение будет иметь размер 250x187 или более, 250x188 пикселей (вы не можете иметь доли пикселя в высоте, для этого требуется целое число!).


Уменьшить масштаб + результат центра в заданной области (и использовать некоторый фоновый цвет для заполнения оставшегося пространства)

Если вы хотите уменьшить масштаб до 250x200 пикселей, сохраняя соотношение сторон оригинала и создавая изображение, которое представляет собой полноразмерные пиксели размером 250x200 пикселей, которые центрируют реальное изображение в этом пространстве, добавив желтый фон, используйте:

  convert              \
     input.jpeg        \
    -scale 250x200     \
    -gravity center    \
    -background yellow \
    -extent 250x200    \
     output3.png

Замените цвет фона любым другим, который вам больше нравится, или с помощью none для прозрачного фона (не поддерживается для вывода JPEG!).


Уменьшить масштаб, сохраняя пропорции + без обрезки в заданной области

Если вы хотите масштабировать до 250x200 пикселей, сохраняя соотношение сторон, полностью заполняя пространство 250x200 (но не обрезая переполнение), используйте:

  convert             \
     input.jpeg       \
    -scale '250x200^' \
     output4.png

(Обратите внимание на символ ^ после настройки геометрии шкалы. Для функции ^ требуется минимальная версия ImageMagick 6.3.8-2.)
При изменении ширины и высоты с добавлением ^ к аргументам -scale или -resize эти параметры считаются минимальными значениями, где действительно достигается только один из этих слишком измерений. Это означает: выходные изображения расширяются или сжимаются до тех пор, пока ширина или высота не будут соответствовать указанному размеру, сохраняя соотношение сторон изображения.

Эта команда выше "пытается" установить размеры 250x200:

  • Когда высота уменьшается до 200 пикселей от первоначальных 1200 пикселей (до 16,6666% от этого исходного значения), требуется масштабирование. Ширина теперь 266,66 пикселей. Это округлено до 267 пикселей.

  • Итак, окончательный размер будет 267x200 пикселей.


Уменьшить масштаб пропорций + с обрезкой до заданной области

Если вы хотите масштабировать до 250x200 пикселей, сохраняя пропорции, полностью заполняя пространство 250x200 (обрезая полосы с левого и правого краев), используйте:

  convert             \
     input.jpeg       \
    -scale '250x200^' \
    -gravity center   \
    -extent 250x250   \
     output5.png

Окончательный размер изображения будет 250x200. По сравнению с предыдущей командой (которая дала результат 250x267), некоторые пиксельные столбцы с левого и правого краев удаляются.

Ответ 2

Принятый ответ не отвечает на вопрос.

Если вам нужен точный размер вывода (например, 250x200), установите максимальную информацию из исходных частей обрезки исходного изображения, чтобы сохранить соотношение сторон, используйте следующую команду:

convert input.jpg -scale "250x200^" -gravity center -crop 250x200+0+0 output.jpg