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