0

Мне нужно увеличить ширину любого изображения сверху донизу с некоторым соотношением сторон.
Есть ли какие-либо решения в PHP GD/imagemagick/fabric js или есть ли какие-либо другие приложения?Применение преобразования перспективы к изображению

First image is the Source. And I need the output like the second image

+0

Есть jmagick, но я не думаю, что он поддерживает -distort. Вы можете использовать AJAX для передачи координат от JavaScript к Imagemagick/php, и я полагаю, это зависит от того, какую функциональность вы хотите. Похоже, вы можете использовать графическую магию с node.js – Bonzo

+0

Помог ли мой ответ решить вашу проблему? Если да, пожалуйста, подумайте о том, чтобы принять его как ваш ответ - нажав полый зеленый галочку/галочку рядом с подсчетом голосов. Если нет, скажите, пожалуйста, что не сработало, чтобы я или кто-то еще помог вам дальше. Благодарю. http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235 –

ответ

1

Вы можете использовать ImageMagick «s +distort оператор вроде этого:

Во-первых, создать стартовую форму:

convert -size 100x300 xc:green shape.gif 

enter image description here

Теперь искажать его расширить основание:

convert shape.gif -virtual-pixel none \ 
    +distort Perspective '0,0,0,0 99,0,99,0 0,299,-60,299 99,299,160,299' result.gif 

enter image description here

Есть 4 пары чисел. Первая пара говорит, что пиксель [0,0] (верхний левый угол) во входном изображении должен появиться на [0,0] на выходном изображении. Второй говорит, что пиксель [99,0] (верхний правый) должен отображаться в том же месте на выходном изображении. Третий говорит, что нижний левый пиксель должен быть на [-60,299] на выходном изображении - то есть на 60 пикселей слева от его текущего положения и вне границы текущего изображения. Аналогично, правый правый пиксель должен отображаться на 60 пикселей справа от его текущего положения и, следовательно, за пределами существующей базы изображений.

Значение виртуального пикселя none делает вновь созданные пиксели прозрачными. Существуют и другие возможные настройки для виртуального пикселя, которые могут быть перечислены следующим образом:

identify -list virtual-pixel 

Выход

Background 
Black 
CheckerTile 
Dither 
Edge 
Gray 
HorizontalTile 
HorizontalTileEdge 
Mirror 
None 
Random 
Tile 
Transparent 
VerticalTile 
VerticalTileEdge 
White 

Если вы хотите сделать свой код немного больше зависит от размеров изображение, вы можете параметризовать их с помощью fx операторов и новой magick команды вместо convert:

magick shape.gif -virtual-pixel none \ 
    +distort Perspective '0,0,0,0 %[fx:w-1],0,%[fx:w-1],0 0,%[fx:h-1],-60,%[fx:h-1] %[fx:w-1],%[fx:h-1],%[fx:w+60],%[fx:h-1]' result.gif 
+0

«новая команда магии вместо конвертирования» в версии imagemagick 7. Я вижу, вам удалось get inline fx working Mark – Bonzo

+0

@Bonzo Да, спасибо! Смотрите - вы ** можете ** учить старую собаку новым трюкам ;-) –

Смежные вопросы