我做了一些谷歌在某个角度搜索了几个不同的php stich图像变体'在这方面,但无法提出任何有用的东西。
我需要创建一个小脚本,用户上传单个图像文件(jpg,png或gif)。然后我需要将这个文件拼接在一起x次(参数也由用户提供)在它的两侧形成一个封闭的形状。
例如,如果x = 6,我需要将图像拼接在120度以创建六边形,如果从顶部查看最终结果。
我真的不知道怎么开始这个,所以不幸的是我现在还不能显示任何代码。
感谢任何消息和帮助。
答案 0 :(得分:1)
这可能不是你想要的,因为它形成一个圆而不是六边形。但是在ImageMagick命令行中,您可以根据需要多次复制输入来执行以下操作。 (我复制了5次,总共6次)。然后使用扭曲弧将其包裹成一个完整的圆圈:
输入:
convert lena.png -duplicate 5 +append -virtual-pixel White -distort Arc 360 tmp.png
您还可以在图像之间放置一个间隔符,如下所示:
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
答案 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
这是num = 5(五边形):
知道Imagick和PHP的人应该能够为你转换它。