将透视变换应用于图像

时间:2016-12-03 13:44:18

标签: javascript imagemagick fabricjs image-manipulation php-gd

我必须以一定的宽高比从上到下增加任何给定图像的宽度。
在PHP GD / imagemagick / fabric js中是否有任何解决方案,还是有其他应用程序?

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

1 个答案:

答案 0 :(得分:1)

您可以像这样使用 ImageMagick +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