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","");//返回信息 }