1

我的任务是让用户上传他们自己的照片,然后网站裁剪面部和头发并将它们粘贴到电子贺卡上。困难的部分是我不允许使用闪光灯 =/

我知道那里有 ajax 或 js 人脸检测解决方案,但让我难过的是如何裁剪奇形怪状的图案。据我所知,Imagemagick/graphicsmagick 只能裁剪矩形或方形对象(如果我错了,请纠正我)。在我拥有裁剪奇怪形状的功能之前,这会破坏整个想法吗?还是有其他方法可以裁剪圆圈或多边形?

突然冒出一个想法,可能允许用户在他们的照片中绘制一些线条进行裁剪,然后网站可能将线条转换为矢量并在线条周围填充颜色,然后颜色由 im 转换为透明......但随后我不知道如何开始这个..目前可能不可能(?)。

我的想法不多了:(

4

1 回答 1

1

我刚刚成功创建了一个作物 :) 虽然并不完美,但它应该可以在 android 或 iphone/ipad 中使用。

基本上我使用了一个 js 绘图工具来标记坐标,将所有这些坐标保存在某个地方。

然后使用imagemagick的坐标,看起来虽然IM并没有真正裁剪奇怪的形状,但是它可以使用'mask'通过组合模板来转换照片的背景(我们使用我们的坐标绘制线条,填充背景#000000 颜色)和原始照片。

结果应该是我们正在寻找的作物:) 现在我们添加了一些羽毛,因为它有点前卫。所有这一切都使用 imagemagick。

现在我们需要的只是曲线,因为我在 IM 中使用了“路径”,它并不能真正提供平滑的裁剪。有人建议使用“三次曲线”,但可能需要额外的编码,因为它需要每个坐标的一些参数。

这个命令将创建我们的模板(一长串数字是我们的坐标):

convert -size 450x125 xc:black -fill white -stroke black -draw "path 'M +60+9 +94+18 +96+19 +84+27 +92+36 +97+43 +103+56 +102+58 +109+66 +109+74 +101+68 +98+76 +98+84 +95+88 +98+91 +106+95 +110+99 +111+103 +99+106 +89+108 +73+112 +56+109 +40+109 +26+103 +37+97 +46+91 +48+88 +39+80 +36+71 +32+78 +27+72 +30+61 +35+55 +42+41 +30+37 +40+24 +51+14 +156+9 +197+6 +236+8 +269+16 +265+36 +248+50 +222+52 +213+35 +198+24 +174+18 +155+13 +60+9'" stencil.gif

然后我们将模板与原始图像结合起来(这应该会带出我们的透明“裁剪”):

convert original.jpg stencil.gif -alpha off -compose CopyOpacity -composite combined.png

最后我们羽化边缘:

convert combined.png -alpha set -virtual-pixel transparent -channel A -blur 0x0.7 -level 50,100% +channel -background none -flatten final.png

这就是它现在的工作方式:https ://lh6.googleusercontent.com/_2lSoW37_zqo/TYCD65Vu4zI/AAAAAAAAEcc/vjlCPM54FTI/s800/theoryinpractice.jpg 

就是这样,我希望这对某人有所帮助。

于 2011-03-16T17:31:16.460 回答