php一个角度的图像

时间:2018-02-21 07:49:45

标签: php imagemagick gd

我做了一些谷歌在某个角度搜索了几个不同的php stich图像变体'在这方面,但无法提出任何有用的东西。

我需要创建一个小脚本,用户上传单个图像文件(jpg,png或gif)。然后我需要将这个文件拼接在一起x次(参数也由用户提供)在它的两侧形成一个封闭的形状。

例如,如果x = 6,我需要将图像拼接在120度以创建六边形,如果从顶部查看最终结果。

我真的不知道怎么开始这个,所以不幸的是我现在还不能显示任何代码。

感谢任何消息和帮助。

2 个答案:

答案 0 :(得分:1)

这可能不是你想要的,因为它形成一个圆而不是六边形。但是在ImageMagick命令行中,您可以根据需要多次复制输入来执行以下操作。 (我复制了5次,总共6次)。然后使用扭曲弧将其包裹成一个完整的圆圈:

输入:

enter image description here

convert lena.png -duplicate 5 +append -virtual-pixel White -distort Arc 360  tmp.png

enter image description here

您还可以在图像之间放置一个间隔符,如下所示:

convert lena.png \( +clone -fill white -colorize 100 -crop 25x100+0+0% +repage \) +append -duplicate 5 +append -virtual-pixel White -distort Arc 360  tmp.png

enter image description here

答案 1 :(得分:0)

我认为这可能就是你想要的。使用ImageMagick 6和bash unix shell脚本。这使用+扭曲SRT。我从图像的中心开始。然后计算图像旋转和放置的位置,使底角位于给定半径的圆上。然后我使用+扭曲SRT移动中心点并将图像旋转角度+ 90,以便围绕圆圈的位置正确旋转。我在循环中执行此操作,以获得要使用的多个副本(在本例中为num = 6)递增角度。一旦循环结束。我使用-layers merge将tmp文件组合到白色背景上,以根据位置和旋转使用添加到每个tmp图像的虚拟画布。然后我删除所有tmp文件。


infile="lena.png"
num=6
angle=$(convert xc: -format "%[fx:360/$num]" info:)
width=$(convert -ping "$infile" -format "%[fx:w]" info:)
height=$(convert -ping "$infile" -format "%[fx:h]" info:)
ix=$(convert xc: -format "%[fx:$width/2]" info:)
iy=$(convert xc: -format "%[fx:$height/2]" info:)
radius=$(convert xc: -format "%[fx:($height/2) + $width/(2*tan((pi/180)*($angle/2)))]" info:)
for ((i=0; i<num; i++)); do
rot1=$(convert xc: -format "%[fx:$i*$angle]" info:)
rot2=$(convert xc: -format "%[fx:$rot1+90]" info:)
ox=$(convert xc: -format "%[fx:($radius+$width)+$radius*cos((pi/180)*$rot1)]" info:)
oy=$(convert xc: -format "%[fx:($radius+$height)+$radius*sin((pi/180)*$rot1)]" info:)
convert "$infile" -virtual-pixel none +distort SRT "$ix,$iy 1 $rot2  $ox,$oy" tmp_$i.png
done
convert tmp_*.png -background white -layers merge +repage result.png
rm -f tmp_*.png


enter image description here

这是num = 5(五边形):

enter image description here

知道Imagick和PHP的人应该能够为你转换它。