英文:
Image transform in PHP
问题
为了简化,我试图将一张图片放在另一张图片/画布上。
画布大小为1920x1080,图片大小不重要。
我想将图片添加到画布上,但要为每个角指定特定的x/y坐标。
看看下面的数组,了解我正在使用的内容:
[0] => Array
(
[cp1x] => 500
[cp1y] => 250
[cp2x] => 250
[cp2y] => 380
[cp3x] => 400
[cp3y] => 700
[cp4x] => 1500
[cp4y] => 800
)
CP1X/CP1Y是左上角。
CP2X/CP2Y是右上角。
CP3X/CP3Y是左下角。
CP4X/CP4Y是右下角。
我最好能得到一个使用PHP和/或ImageMagick的解决方案。
还制作了示意图以更好地解释。
希望一切都清楚。
尝试使用Imagick和PHP进行制作。
英文:
to keep it simple I am trying to put a image on a image/canvas.
Canvas = 1920x1080, image size doesn't matter.
I want to add the image into the canvas but with specific x/y coordination for each corner.
Look at my array here below to see what I'm working with:
[0] => Array
(
[cp1x] => 500
[cp1y] => 250
[cp2x] => 250
[cp2y] => 380
[cp3x] => 400
[cp3y] => 700
[cp4x] => 1500
[cp4y] => 800
)
CP1X/CP1Y are for the top left.
CP2X/CP2Y are for the top right.
CP3X/CP3Y are for the lower left.
CP4X/CP4Y are for the lower right.
I'd preferably get a solution in php and -or ImageMagick.
Also made sketches to give a better explanation.
Hope it's all clear.
Tried making it with Imagick and PHP transform.
答案1
得分: 1
你的坐标与描述不匹配,它们按顺时针方向列出,从左上角开始。
你可以在Imagemagick中使用+distort perspective来获得在你的坐标和输入图像的角落之间的结果。
输入:
Unix语法:
canvas_size="1920x1080"
canvas_color="blue"
# 从左上角开始列出的点
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
结果:
英文:
Your coordinates do not match your description. They are list counter clockwise from the top left.
You can get the result in Imagemagick using +distort perspective between your coordinates and the corners of the input images.
Input:
Unix syntax:
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
Result:
答案2
得分: 0
我没有任何可用的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对坐标,源图像中的坐标在对应的目标图像点之前列出。
英文:
I don't have any working PHP setup, but here's how you do it on the command line. I used a 1920x1080 swirl as the background (bg.jpg
) with your 400x400 overlay image as the foreground (fg.jpg
) to distort:
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
You will see there are 4 pairs of coordinates, with those in the source image listed before the corresponding point in the destination image.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论