圆角头像剪裁php,PHP与JS实现头像剪裁功能架构总结

7f401c30f97468d96388be3904c6e4f9.png

fff6e2e5e26208a78829a1f3eaeadea0.png

准备开发个头像上传及剪裁功能 想象的比较简单 没想到做起来这么费时间 – – 逻辑也要比我想象的多 下面简单说一下前后端的实现!

前端:主要是用JS 这里如果想偷懒的话推荐两个JQ jcrop和jscroll都很不错

前端主要是对图片进行定位 剪裁 长宽 和 横纵坐标的计算(这里有个问题 假如图片尺寸过大 要给一个max-width:600px;的属性)

后端:1、先接收剪裁图片的原图

2、将原图进行第一次处理 AJAX返回给前端 JS:前端加载 后端的图片 并且将图片动态给予剪裁指令相关function

3、将剪裁的参数 x y w h 及原图文件名 四个参数值传入到后端

4、后端处理

(1)在服务器内的原图  (2)前端的五个数据

根据数据读取服务器内原图 然后通过参数对图片进行剪裁 生成第二张图片

这里有个小细节需要注意:之前前端max-width:600px; 那我们后端在处理的时候 也要对大于600像素宽度的图进行等比剪裁处理

也就是 1、先将服务器内width>600px的图片 等比例 生成图片2

2、将图片2 他就是宽度600px

暂时就用PHP的封装方法了撒 使用的是GD库

//有头像 并且 把昵称字段追加进来

$picname=$_POST['avatarf']; //将POST的名字传进来

$image = new \Think\Image();

$imagesinfo=$image->open('images/user/avatar/temp/'.$picname);

$imgwidth=$imagesinfo->width();

$imgheight=$imagesinfo->height();

$p1=stripos($picname,'.'); //返回点的位置 分析图片名称

$picstart=substr($picname,0,$p1); //计算图片名

$picend=substr($picname,$p1); //计算图片后缀

if($imgwidth > 600){ //图像最大限度600px 大于600生成600px

$w1= 600; //前台max-width:600px

$h1= floor($imgheight*(600/$imgwidth)); //计算宽度600的等比例高度

$imgmax=$image->thumb($w1,$h1)->save('images/user/avatar/temp/'.$picstart.'_max600'.$picend);

$image->open('images/user/avatar/temp/'.$picstart.'_max600'.$picend);

}

//将图片裁剪为400x400并保存为corp.jpg

$avatarname=$uinfo['id'].mt_rand(1000,9999);

$image->crop($_POST['w'],$_POST['h'],$_POST['x'],$_POST['y'])->thumb(150,150)->save('images/user/avatar/'.$avatarname.$picend);

$config=array(

'name' => $name,

'avatar' => '/images/user/avatar/'.$avatarname.$picend

);

$res=$Musers->Mupdate($uinfo['id'],$config);

if($res){

$this->uinfoload(); //更新uinfo session

echo '{"state":1,"con":"头像修改成功"}';

}else{

echo '{"state":2,"con":"修改失败,错误3901"}';

}

将剪裁处理后的图片名存入到数据库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值