0x00 加载基本的js
<script src="/js/jquery-2.2.2.min.js"></script> <script src="/plugin/layer/layer.js"></script> <script src="/plugin/jcrop/js/jquery.Jcrop.js"></script> <script src="/js/upLoadFile.js"></script>
0x01 加载html
<a href="javasript:;" class="imgclick" onclick="uploadimg()">点击上传照片</a> <img id="img_preview" src="/images/1.jpg" width="500px" height="400px" /> <input type="file" name="file" id="id" nullmsg="请上传图片" style="display: none;" onchange="return uploadimg('id','images', 'img_preview',{ _token:'{!! csrf_token() !!}'} );" /> <div id="preview-pane"> <div class="preview-container"> <img src="/images/1.jpg" class="jcrop-preview" alt="Preview" /> </div> </div> <div class="avatarupload" value=""></div> <button class="avatarbutton">提交</button>
0x02 加载额外的js
//上传照片js
function uploadImageToServer(fileElmId, type, id) { var data = arguments[3]?arguments[3]:''; var src = $("#"+id).attr("src"); $("#"+id).attr("src", "/images/loading.gif"); $.ajaxFileUpload({ url: '/service/upload/' + type, fileElementId: fileElmId, dataType: 'json', data : data, success: function (data) { if ( result.status != 0 ) { $("#"+id).attr("src", src); layer.msg(result.message, {icon:2, time:2000}); } else { $("#"+id).attr("src", result.uri); layer.msg(result.message, {icon:1, time:2000}); } }, error: function (XMLHttpRequest, textStatus, errorThrown) { console.log(XMLHttpRequest); console.log(textStatus); console.log(errorThrown); alert(errorThrown); } }); return false; } //剪切照片js function avatarimg(target,preview,pcnt,pimg) { var jcrop_api, boundx, boundy, $preview = $('' + preview + ''), $pcnt = $('' + pcnt + ''), $pimg = $('' + pimg + ''), $target = $('' + target + ''), xsize = $pcnt.width(), ysize = $pcnt.height(), targetw = $target.width(), targeth = $target.height(); console.log('init',[xsize,ysize]); $('' + target + '').Jcrop({ onSelect: updatePreviewSelect, onChange: updatePreview, aspectRatio: xsize / ysize },function(){ var bounds = this.getBounds(); boundx = bounds[0]; boundy = bounds[1]; jcrop_api = this $preview.appendTo(jcrop_api.ui.holder); }); function updatePreview(c) { if (parseInt(c.w) > 0) { var rx = xsize / c.w; var ry = ysize / c.h; $pimg.css({ width : Math.round(rx * boundx) + 'px', height: Math.round(ry * boundy) + 'px', marginLeft : '-' + Math.round(rx * c.x) + 'px', marginTop : '-' + Math.round(ry * c.y) + 'px', }); } }; function updatePreviewSelect(c) { if (parseInt(c.w) > 0) { var rx = xsize / c.w; var ry = ysize / c.h; $pimg.css({ width : Math.round(rx * boundx) + 'px', height: Math.round(ry * boundy) + 'px', marginLeft : '-' + Math.round(rx * c.x) + 'px', marginTop : '-' + Math.round(ry * c.y) + 'px', }); } // console.log(rx); // console.log(ry); // console.log(xsize); // console.log(ysize); // console.log(c.w); // console.log(c.h); // console.log(boundx); // console.log(boundy); // c.w 实际截屏宽度 // c.h 实际截屏高度 // xsize 缩放宽度 // ysize 缩放高度 // boundx 原图压缩成宽 // boundy 原图压缩成高 if($(".avatarupload").length != 0 ) { var _avatar = $(".avatarupload"); $(_avatar).val(''+ c.x +',' + c.y + ',' + c.w + ',' + c.h + ',' + targetw + ',' + targeth + ','+ xsize + ',' + ysize + ''); console.log(_avatar.val()); } } } //触发功能js //上传照片 function uploadimg() { $('#input_id').click(); } //ajax提交信息 $(".avatarbutton").on('click',function(){ console.log($(".avatarupload").val()); $.myajax( 'api/post/avatarupload', 'post', { imgurl : $("#img_preview").attr('src'), imgdata: $(".avatarupload").val(), _token : "{!! csrf_token() !!}" }, function(data){ console.log(data); } ); }); //初始化jcrop avatarimg('#img_preview','#preview-pane','.preview-container','.jcrop-preview'); //同步所有的照片 setInterval(function(){ $(".jcrop-preview").attr('src',$("#img_preview").attr('src')); $(".jcrop-holder img").attr('src',$("#img_preview").attr('src')); },500);
0x03 上传文件后台处理局部代码
$file_error = $_FILES["file"]["error"]; if ( $file_error != 0 ) { switch($file_error) { case 1 : $error = "文件大小超过php.ini系统限定";break; case 2 : $error = "文件大小超过nginx的MAX_FILE_SIZE指定值";break; case 3 : case 4 : case 5 : $error = "文件上传失败";break; default: $error = '请上传正确的照片';break; } $error = "上传记录 : ".$error; Log::info("$error"); return $result->toSave(0,'',"$error");//返回错误信息 } $width = $request->input('width',''); $height= $request->input('height',''); $file = $request->input('file'); $imagetype = ['image/gif','image/jpg','image/png','image/pjpeg','image/ico','image/jpeg']; //判断是否为image if ( in_array($_FILES['file']['type'],$imagetype)) { //做逻辑判断和写入服务器 }
0x04 上传图片剪切后台处理
public function avatarupload(Request $request) { $result = new Result; $imgdata = $request->input('imgdata',''); $imgurl = '.'.$request->input('imgurl',''); $imgdata = explode(',',$imgdata); //传裁切参数 $o_img = getimagesize($imgurl); $aspectRatiow = $o_img[0]/intval($imgdata[4]); $aspectRatioh = $o_img[1]/intval($imgdata[5]); $x = $imgdata[0]*$aspectRatiow; $y = $imgdata[1]*$aspectRatioh; $w = $imgdata[2]*$aspectRatiow; $h = $imgdata[3]*$aspectRatioh; $targ_w = intval($imgdata[6]); $targ_h = intval($imgdata[7]); //切图 $jpeg_quality = 90; @$img_r = imagecreatefromjpeg($imgurl); if (empty($img_r)) { @$img_r = imagecreatefromgif($imgurl); } if (empty($img_r)) { @$img_r = imagecreatefrompng($imgurl); } if (empty($img_r)) { @$img_r = $this->_imageCreateFromBMP($imgurl); } if (empty($img_r)) { return $result->toSave(0,"","照片格式只支持jpg,gif,png,bmp"); }
$dst_r = ImageCreateTrueColor( $targ_w, $targ_h ); imagecopyresampled($dst_r,$img_r,0,0,$x,$y,$targ_w,$targ_h,$w,$h); //替换原照片 imagedestroy($img_r); imagejpeg($dst_r,$imgurl); $result->imgurl = $imgurl; $result->imgdata = $imgdata; return $result->toSave(1,"ok","");//返回信息 }