Imagemagick, как применять гравитацию и экстент только к коротким изображениям - PullRequest
2 голосов
/ 08 июля 2019

У меня есть веб-страница, где я перечисляю изображения размером 600 на 600 пикселей (ширина и высота). Поэтому я изменяю размеры всех больших изображений до 600x600, используя imagemagick, который отлично работает.

Тем не менее, некоторые изображения, когда я изменяю их размер (чтобы сохранить их соотношение сторон), меняются до размера меньше 600 пикселей в высоту (например, 600x450). Поэтому я попытался заполнить необходимую высоту, используя параметры imagemagick (гравитация, фон и экстент) следующим образом:

image.combine_options do |img|
    img.crop('1200x1200+0+0')
    img.resize '600x600'
    img.background 'white'
    img.extent '600x600'
    img.gravity 'center'
end

Это дало мне то, что я хочу для таких изображений (короткие изображения). Однако этот эффект центрирования применяется и к другим изображениям (более крупным)! Есть ли способ предотвратить это?

Обновление:

Просто чтобы показать вам, что я имею в виду, я составил этот пример ... если я не добавлю экстент и гравитацию, изображение начнется с верхнего левого угла

enter image description here

но если я добавлю экстент и гравитацию (в центр), изображение начнется с центра, примерно так:

enter image description here

Я хочу, чтобы центрировались только те изображения, которые получаются на изображениях, размер которых меньше 600x600, но в примере, как вы видите, даже изображение, размер которого изменяется с точностью до 600x600, центрируется !! это не то, что я хочу

решение:

В итоге я использую команду оболочки, используя system функцию в ruby ​​

system "convert #{image.path} -crop 1024x1024+0+0 -resize 600x600 -background white -gravity center -extent 600x600 output.png"

и это сработало нормально! Я не знаю, почему минимагик не работал должным образом, но я просто избавился от этого драгоценного камня из своего файла драгоценного камня, который тоже подойдет.

1 Ответ

0 голосов
/ 08 июля 2019

Вот ваша команда в командной строке Imagemagick с правильным сбросом виртуального холста после обрезки.

convert image -crop 1200x1200+0+0 +repage -resize 600x600 -background white -gravity center -extent 600x600 result

Вот два результата с немного отличающимися аргументами изменения размера. Похоже, что ваши команды используют эквивалент флага ^, установленного в аргументе resize.

Введите:

enter image description here

Правильный результат без флага ^: (примечание дополнено белым)

convert wiki.png -crop 1200x1200+0+0 +repage -resize 600x600 -background white -gravity center -extent 600x600 result1.png


enter image description here

Результат с флагом ^ (примечание обрезано)

convert wiki.png -crop 1200x1200+0+0 +repage -resize 600x600^ -background white -gravity center -extent 600x600 result2.png


enter image description here

Выше приведен синтаксис Unix. Для Windows удвойте ^ до ^^, так как ^ - это escape-символ в Windows.

Возможно, ваша проблема в минимагике, а не в Imagemagick. Вы можете проверить, протестировав мою командную строку.

...