2013-06-21 4 views
0

Очень просто у меня есть сценарий, который вызывает imagemagick на моих фотографиях.ImageMagick loss aspect ratio

Исходное изображение 320 х 444, и я хочу, чтобы создать несколько уменьшенную версию, но сохраняя тот же пропорции

Я называю ImageMagick с помощью

convert oldfile.png -resize 290x newfile.png 

Я хочу растягивать его на мой установите ширину, но шкала высот соответственно.

Я делаю 80x, 160x и 290x в 3 отдельных командах.

Меньше всего 2 изображений с таким же исходным соотношением сторон, 290x нет.

Размер изображения он производит 290 x 402

я не знаю, почему, что один не сможет сохранить пропорции, но другие 2 размера maintaine его.

Любые идеи?

ответ

1

Я считаю, что проблема в третьих командах сам по себе запрашиваемому размеру:

  1. в первой команде оба измерения разделены на 4: 320/4=80 и 444/4=111
  2. во второй команде оба измерений делятся на 2: 320/2=160 и 444/2=222

444 и 320 имеют только два общих делителей: 2 и 4. Вы уже использовали эти делители в ваших первых двух командах, поэтому любая другая (ширина, высота) пара даст вам немного другое соотношение сторон: невозможно получить то же точное фиксированное соотношение сторон 290.

Фактически, хотя ваш оригинал изображение имеет соотношение сторон 1.3875, с изображением 290x403 вы получите соотношение сторон 1,389655172, а с изображением 290x402 вы получите коэффициент 1,386206897: при фиксации 290 нет другого значения измерения, которое может дать желаемое соотношение сторон.

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

Аргумент оператор изменения размера является областью, в которой изображение должно быть установлено , Эта область не является окончательным размером изображения, но максимальные размеры для изображения . Это связано с тем, что IM пытается сохранить соотношение сторон изображения больше, чем окончательное (если только флаг «!» Не указан ), но по крайней мере один (если не оба) конечных размеров должен соответствовать данное изображение. Поэтому позвольте мне быть ясным ... Resize поместит изображение в требуемый размер. Он НЕ заполняет, запрошенный ящик размер.

Для получения дополнительной справки см here

+0

Так что ваше высказывание в то время как он действительно пытается сохранить пропорции то же самое, что в последнем примере это наклоняется вполне получить его в соответствие, но он все равно будет формировать изображение к этой фиксированной ширине, теряющей соотношение сторон (но поддерживая ее как можно ближе?) – binarysmacker

+0

@binarysmacker Да, согласно документации IM, это так, как это работает – Andrea