Ресайз картинки ImageMagick'ом с условием по ширине.

phprus

Moderator
Команда форума
Ресайз картинки ImageMagick'ом с условием по ширине.

Подскажите пожалуйста, можно ли при помощи convert решить такую задачу:
Если картинка шире Х пикселей, то пропорционально ужать ее до ширины в Х пикселей, а если уже Х пикселей, то получить изображение у которого ширина будет Х, высота как у оригинальной картинки и оригинальная картинка спозиционирована по середине новой с заливкой полей цветом #YYYYYY
?

С просто масштабированием и проверкой условий в вызывающем convert коде проблем нет, оно делается опцией ‑resize и if'ами. Вопрос в том, можно ли реализовать такое условное масштабирование параметрами convert. Чтение документации пока не помогло.

-~{}~ 13.02.09 23:18:

При помощи convert 2.jpg -quality 90 -resize 200\> +profile "*" 3.jpg удалось добиться того, что если картинка уже 200 пикселей, то она не растягивается до 200 пикселей, а остается оригинального размера.
Осталось придумать как в таком случае сделать чтобы результат все-же получился шириной 200, но поля были заполнены цветом фона.
 

fixxxer

К.О.
Партнер клуба
это конечно не совсем в тему, но по-моему, лучше не заполнять цветом фона, а положить <img> в соответствующий <div> :)
 

phprus

Moderator
Команда форума
fixxxer
Я знаю про такой способ и обычно его и использую так как он проще и в дальнейшем при смене фона проблем не будет, но в данном случае понадобилось сделать именно картинку с фоном если оригинал уже заданного размера.
 

phprus

Moderator
Команда форума
MiksIr
Да, но там в size надо высоту задавать, а я ее заранее не знаю.
Похоже что без знания высоты мало что можно сделать в данном случае или вообще ничего нельзя :(
 

MiksIr

miksir@home:~$
Э... а как ты вообще представляешь себе
"картинка меньше 200 пикселей по ширине, хочу бордюр"... эта задача не решаема _в принципе_ даже руками, поскольку неизвестно - какую же ты высоту хочешь
 

phprus

Moderator
Команда форума
MiksIr
Высота должна быть как у той картинки которая меньше 200 пикселей по ширине. Те поля должны добавится с боков, а высота не измениться. А в случае если картинка более широкая, то картинка должна просто пропорционально отмасштабироваться до ширины 200. Те высота результата зависит от того масштабировали его или нет. Если нет, то высота результата как у оригинала иначе та высота которая получится после масштабирования. В этой неоднозначности и сложность.
 

MiksIr

miksir@home:~$
т.е. если картинка 1x1 то нужно сделать 200x1... и т.д - правильно я понял?
Нада подумать.... но уже не сегодня =)
 

MiksIr

miksir@home:~$
http://www.imagemagick.org/Usage/crop/#extent
Возможно то, что нужно - негде ща проверить
если ему геометрию сказать 200x< к примеру
 

phprus

Moderator
Команда форума
MiksIr
Да это оно. Странно, как я сам этого не нашел когда вчера читал эти примеры.

Спасибо.

Окончательный вариант получился такой:
Код:
convert 1.gif -quality 90 -resize 200\> -background '#ffffff' -gravity center -extent 200 +profile '*' -alpha set -channel RGBA -fill '#ffffff' -opaque none +adjoin jpg:- > 12.jpg 2>/dev/null
 
Сверху