600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > php 上传图片 裁剪 thinkphp_图片上传裁剪功能_已迁移

php 上传图片 裁剪 thinkphp_图片上传裁剪功能_已迁移

时间:2022-08-28 17:15:39

相关推荐

php 上传图片 裁剪 thinkphp_图片上传裁剪功能_已迁移

准备材料

THINKPHP

jQuery表单插件

cropper 裁剪插件

思路: 利用THINKPHP上传文件类与图片裁剪类,前台想办法组合参数给后台 那怎么样可以异步提交文件呢 关键就是 jquery表单插件了

后台准备

前台准备

即时预览图片 (不会上传文件)

/**

*从file域获取本地图片url

*/

functiongetFileUrl(sourceId){

varurl;

if(navigator.userAgent.indexOf("MSIE")>=1){//IE

url=document.getElementById(sourceId).value;

}elseif(navigator.userAgent.indexOf("Firefox")>0){//Firefox

url=window.URL.createObjectURL(document.getElementById(sourceId).files.item(0));

}elseif(navigator.userAgent.indexOf("Chrome")>0){//Chrome

url=window.URL.createObjectURL(document.getElementById(sourceId).files.item(0));

}

returnurl;

}

/**

*将本地图片显示到浏览器上

*/

functionpreImg(sourceId,targetId){

varurl=getFileUrl(sourceId);

varimgPre=document.getElementById(targetId);

imgPre.src=url;

}

//触发事件调用

preImg(this.id,'imgPre');

我的实现代码

前端

上传新头像

选择文件

未选择文件

支持格式:jpg、jpeg、png、gif格式,大小不超过5M

确定重新上传

温馨提示:

禁止上传违反中华人民共和国相关法律的照片,若上传,相关

法律后果有个人承担

//头像上传裁剪start

$(function(){

//打开或关闭弹出层

$(document).ready(function(){

$('.toux').click(function(){

$('.txsc').fadeIn(300);

})

$('.txsc.close').click(function(){

$('.txsc').fadeOut(300);

})

});

/**

*从file域获取本地图片url

*/

functiongetFileUrl(sourceId){

varurl;

if(navigator.userAgent.indexOf("MSIE")>=1){//IE

url=document.getElementById(sourceId).value;

}elseif(navigator.userAgent.indexOf("Firefox")>0){//Firefox

url=window.URL.createObjectURL(document.getElementById(sourceId).files.item(0));

}elseif(navigator.userAgent.indexOf("Chrome")>0){//Chrome

url=window.URL.createObjectURL(document.getElementById(sourceId).files.item(0));

}

returnurl;

}

/**

*将本地图片显示到浏览器上

*/

functionpreImg(sourceId,targetId){

varurl=getFileUrl(sourceId);

varimgPre=document.getElementById(targetId);

imgPre.src=url;

}

//先清除原来的图片

$("#imgOne").click(function(){

$('.avatar_img').html('');

})

//点击重新上传相当于点击了上传文件

$("#resetUplode").click(function(){

$("#imgOne").click();

})

$("#imgOne").live('change',function(){

preImg(this.id,'imgPre');

//图片裁剪初始化

$('.container>img').cropper({

aspectRatio:16/9,

rotateControls:true,

zoomable:true,

crop:function(data){

//$('.avatar-data').

varx=data.x;

vary=data.y;

varwidth=data.width;

varheight=data.height;

varavatarData='{"x":'+x+',"y":'+y+',"height":'+height+',"width":'+width+',"rotate":0}';

$('.avatar-data').val(avatarData);

}

});

});

//放大

$("#enlarge").click(function(){

$('.container>img').cropper('zoom',+0.1);

})

//缩小

$("#shrink").click(function(){

$('.container>img').cropper('zoom',-0.1);

})

/*异步上传图片*/

$("#avatar_sumbit").click(function(){

$('#avatar_form').ajaxSubmit(function(data){

//console.log(data);

//替换当前图片的路径

$(".toux").attr('src',data.crop_path);

//接收图片ID后,放到当前页面中

$("input[name='head_img']").val(data.pic_id);

//关闭当前弹出层

$('.txsc').fadeOut(300);

});

returnfalse;

});

});

//头像上传裁剪end

PHP端

控制器中的方法

publicfunctionajaxAvatar(){

$avatarArr=json_decode(I('post.avatar_data'),1);

$picModel=D('picture');

$info=$picModel->ajaxUpload($_FILES,$avatarArr);

$this->ajaxReturn($info);

}

图片model层代码

/**

*图片上传

*@paramarray$files要上传的图片列表(通常是$_FILES数组)

*@paramarray$setting图片上传配置

*@paramstring$driver图片驱动名称

*@paramarray$config图片驱动配置

*@returnarray图片上传成功后的信息

*/

publicfunctionupload($files,$setting,$driver='Local',$config=null){

/*上传文件*/

$Upload=new\Think\Upload($setting,$driver,$config);

$info=$Upload->upload($files);

/*设置文件保存位置*/

$this->_auto[]=array('location','Ftp'===$driver?1:0,self::MODEL_INSERT);

if($info){//文件上传成功,记录文件信息

foreach($infoas$key=>&$value){

/*已经存在文件记录*/

if(isset($value['id'])&&is_numeric($value['id'])){

$value['path']=substr($setting['rootPath'],1).$value['savepath'].$value['savename'];//在模板里的url路径

continue;

}

$value['path']='.'.substr($setting['rootPath'],1).$value['savepath'].$value['savename'];//在模板里的url路径

/*记录文件信息*/

if($this->create($value)&&($id=$this->add())){

$value['id']=$id;

}else{

//TODO:文件上传成功,但是记录文件信息失败,需记录日志

unset($info[$key]);

}

}

return$info;//文件上传成功

}else{

$this->error=$Upload->getError();

returnfalse;

}

}

/*更新或添加*/

publicfunctionupdate($data)

{

$data=$this->create($data);

if(!$data){returnfalse;}

returnempty($data['id'])?$this->add():$this->save();

}

/**

*异步上传并裁剪图片

*@param$file$_FILES文件信息

*@param$pic要裁剪信息

*@param$pre裁剪后图片前缀

*@returnarray图片裁剪之后的地址原图片地址图片ID

*/

publicfunctionajaxUpload($file,$picArr,$pre='crop'){

$config=array(

'maxSize'=>3145728,

'rootPath'=>'./Uploads/Picture/',

'savePath'=>'',

'saveName'=>array('uniqid',''),

'exts'=>array('jpg','gif','png','jpeg'),

'autoSub'=>true,

'subName'=>array('date','Y-m-d'),

);

//可以直接调用系统的上传类

$info=$this->upload($file,$config);

//截图略缩图

$image=new\Think\Image();

$image->open($info['avatar_file']['path']);

$crop_path='./Uploads/Picture/'.$info['avatar_file']['savepath'].$pre.'_'.$info['avatar_file']['savename'];

$image->crop($picArr['width'],$picArr['height'],$picArr['x'],$picArr['y'])->save($crop_path);

//原图片路径

$info['org_path']=$info['avatar_file']['path'];

//裁剪后图片路径

$info['crop_path']=$crop_path;

//图片ID

$info['pic_id']=$info['avatar_file']['id'];

return$info;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。