我刚好有这个需求,顺手解决了。跟大家分享下。
1、avatar.html 41行 改为
加了个accept属性,方便启用相机或者接受手机相册图片。
2、avatar.html 100行前 插入
c["pw"]=$("#J_pic").width();
c["ph"]=$("#J_pic").height();
主要是用来存储图片的当前大小。因为在手机中,图片可能被缩小了,而jcrop截图所得的数据则是根据你看到的来计算。最终会导致实际裁出的图片只有一小块。
3、ProfileAction.class.php 144行 插入
$pw=I("post.pw");
$ph=I("post.ph");
if($pw!=$imginfo[0] || $ph!=$imginfo[1]){
$targ_w=round($imginfo[0]/$pw*$targ_w,0);
$targ_h=round($imginfo[1]/$ph*$targ_h,0);
$_POST['x']=round($imginfo[0]/$pw*$_POST['x'],0);
$_POST['y']=round($imginfo[1]/$ph*$_POST['y'],0);
}
这样就可以了。
补充两点:
1、其实只要用js在前台算好图片缩放比例,然后重新计算w,h,x,y的值传回后台就可以了,php文件根本不用改变。但我稍微查了下,要用js查看图片原始宽高好像挺复杂的,所以就用这个笨办法了。
2、上述用了一大堆post值,只是为了配合原来代码中的应用,理论上这些post都应先通过I取出来再计算。懂的自己改吧。