当前登录: 游客
鸟枪换炮
作者:water 地方: 北京 发布时间:2008-09-13 19:07:02 已经有88人阅读过

看原大图
用自己的技术搞定换的艺术
看原大图
第二次测试 - 加入了纵横比 ratio
看原大图
第三版 - 修正了 x0, y0 减去比例后可能为 0 的 bug
看原大图
这个美女没问题了
看原大图
第四版 - 罗同学也修正了 有可能有黑边的情况

代码:

<?

$imgsz = getimagesize("./template/painting.jpg");
$sim = imagecreatefromjpeg("./template/painting.jpg");
$dim = imagecreatefromjpeg("./pt_02.jpg");

$cline = imagecolorallocate($sim, 0, 0, 255);

imagecopyresampled($sim, $dim, $fp["x"], $fp["y"],
105,70,
$fp["w"], $fp["h"],
105+280,70+300);

header ("Content-type: ".$imgsz["mime"]);
imagejpeg($sim, null, 80);
imagedestory($sim);


?>
[water@localhost www]$


代码:

$spic_fn = "./template/painting.jpg";

... (secrets)

$dpic_fn = "./pt_07.jpg";
$npic_fn = "./output/".date(mdHis).".jpg";

$dpic_sz = getimagesize($dpic_fn);
$dpic_mw = $dpic_sz[0];
$dpic_mh = $dpic_sz[1];

/* Water Face Detection Result */
... (secrets)

if($fcnt == 1)
{
$theface = 0;
}
else
{
echo "识别出人脸数目不等于 1 ,程序将自动判断!".$fcnt."<BR />";

for($i=0;$i<$fcnt;$i++)
{
$tw[$i] = $wfdr[$i]["w"];
}

for($i=0;$i<$fcnt;$i++)
{
$th[$i] = $wfdr[$i]["h"];
}

$val_tw = findmaxarrkey($tw);
$val_th = findmaxarrkey($th);

if($val_tw == $val_th)
{
$theface = $val_tw;
}
else
{
echo "程序无法判断面部信息 $val_tw, $val_th 退出!<BR />";
exit(0);
}
}

for($i=0;$i<$fcnt;$i++)
{
$dfc[$i]["x0"] = round($wfdr[$i]["x"] + 0.5 * $wfdr[$i]["w"]);
$dfc[$i]["y0"] = round($wfdr[$i]["y"] + 0.5 * $wfdr[$i]["h"]);
}

/* GD PART */
$sim = imagecreatefromjpeg($spic_fn);
$dim = imagecreatefromjpeg($dpic_fn);

$cline = imagecolorallocate($sim, 0, 0, 255);

$ratio = $wfdr[$theface]["w"] / $dpic_mw;

$dfp["x"] = round($dfc[$theface]["x0"] - 0.5 * $fp["w"] / $ratio);
$dfp["y"] = round($dfc[$theface]["y0"] - 0.5 * $fp["h"] / $ratio);
$dfp["w"] = round($fp["w"] / $ratio);
$dfp["h"] = round($fp["h"] / $ratio);

if($dfp["x"]<0) $dfp["x"]=0;
if($dfp["y"]<0) $dfp["y"]=0;
if($dfp["w"]>$dpic_mw) $dfp["w"]=$dpic_mw; //$fp["w"];
if($dfp["h"]>$dpic_mh) $dfp["h"]=$dpic_mh; //$fp["h"];

imagecopyresampled($sim, $dim, $fp["x"], $fp["y"], $dfp["x"], $dfp["y"],
$fp["w"], $fp["h"], $dfp["w"], $dfp["w"]);

imagejpeg($sim, $npic_fn, 80);

echo "centre = ".$dfc[$theface]["x0"]."-".$dfc[$theface]["y0"]." top = ".$dfp["x"]."-".$dfp["y"]."<BR />";

echo "<img src='".$npic_fn."' />";

?>
</body>
</html>
我最近发表的
西塘清晨
吃在杭州 (一)
早餐 A 计划
西塘夜色
杭州印象 (三)
评论
1#
我也玩这个。可还没看懂。
评论者: 游客 (feel) 评论时间: 2008-09-15 15:13:42
2#
怎么说了,我只能套句老话儿。 很好,很强大!
评论者: 游客 (KK) 评论时间: 2008-09-17 12:02:37
发表评论
用户名: 密码 昵称 匿名留言 我要记录