PHP中的图像转换

8yparm6h  于 2023-03-11  发布在  PHP
关注(0)|答案(2)|浏览(131)

为了简单起见,我试着把一个图像放在一个图像/画布上。画布= 1920 x1080,图像大小无关紧要。我想把图像添加到画布上,但每个角都有特定的x/y坐标。看看下面的数组,看看我在做什么:

[0] => Array
(
    [cp1x] => 500
    [cp1y] => 250
    [cp2x] => 250
    [cp2y] => 380
    [cp3x] => 400
    [cp3y] => 700
    [cp4x] => 1500
    [cp4y] => 800
)

CP 1X/CP 1 Y用于左上方。CP 2X/CP 2 Y用于右上方。CP 3X/CP 3 Y用于左下方。CP 4X/CP 4 Y用于右下方。
我最好在php和-或ImageMagick中得到一个解决方案。
我也画了些草图以便更好地解释。希望一切都清楚了。
Image
Base/canvas
Result
尝试用Imagick和PHP转换。

cwtwac6a

cwtwac6a1#

您的坐标与您的描述不符。它们是从左上角开始逆时针排列的。
您可以在Imagemagick中使用+distort透视在您的坐标和输入图像的角之间获得结果。
输入:

Unix语法:

canvas_size="1920x1080"
canvas_color="blue"
# points listed counter clockwise from top left
cp1x=500
cp1y=250
cp2x=250
cp2y=380
cp3x=400
cp3y=700
cp4x=1500
cp4y=800
infile="lena.png"
ww=`convert "$infile" -format "%w" info:`
hh=`convert "$infile" -format "%h" info:`
p1x=0
p1y=0
p2x=0
p2y=$((hh-1))
p3x=$((ww-1))
p3y=$((hh-1))
p4x=$((ww-1))
p4y=0
convert \( -size $canvas_size xc:"$canvas_color" \) \
\( "$infile" -virtual-pixel none -mattecolor none -define distort:viewport=${canvas_size}+0+0 +distort perspective \
"$p1x,$p1y $cp1x,$cp1y  $p2x,$p2y $cp2x,$cp2y  $p3x,$p3y $cp3x,$cp3y  $p4x,$p4y $cp4x,$cp4y" \) \
-compose over -composite \
result.jpg

结果:

vptzau2j

vptzau2j2#

我没有任何可用的PHP设置,但下面是在命令行中的操作方法。我使用1920x1080的漩涡作为背景(bg.jpg),使用400x400的叠加图像作为前景(fg.jpg)来扭曲:

magick bg.jpg \
   \( fg.png -virtual-pixel transparent +distort Perspective '0,0,500,250 399,0 1500,380 0,399,400,800 399,399,1250,700' \) \
   -flatten result.png

您将看到有4对坐标,源图像中的坐标列在目标图像中的对应点之前。

相关问题