相信大家在一些网站上看到通过QQ截图,然后粘贴图片就可以在网站实现预览该截图的功能,这么便捷的操作是不是非常利于用户的体验呢。
下面通过JQUERY进行实现这一个功能,并且实现上传该图片到后端服务器。主要利用的是HTML5的clipboardData及FileReader,目前支持chrome及safari浏览器。
1、粘贴事件绑定
首先进行绑定paste事件,触发paste事件时获取到剪贴板的内容
然后对内容进行过滤出文件为图片类型的内容,通过FileReader生成dataurl文件资源,将该资源传递给IMG标签的src即可进行预览.
如需要对图片进行裁剪功能可以使用一个JQUERY插件(jcrop):
$("body").on('paste',pastepic);var pastepic=function(event){ if (event.originalEvent) { event = event.originalEvent; } var clipboardData = event.clipboardData; if (clipboardData && clipboardData.items) { item = clipboardData.items[0]; types = clipboardData.types || []; for (var i = 0; i < types.length; i++) { if (types[i] === 'Files') { item = clipboardData.items[i]; break; } } if (item && item.kind === 'file' && item.type.match(/^p_w_picpath\//i)) { var blob = item.getAsFile(), reader = new FileReader(); reader.onload = function(e) { var imgStr = e.target.result; if (imgStr.indexOf('base64,') != -1) { showpic(imgStr); } }; reader.readAsDataURL(blob); }else{ alert('该粘贴内容非图片格式~'); } }else{ alert('没有发现粘贴内容~'); } }
2、上传到后端服务器
简单的AJAX异步过程调用,只是获取图片值的时候只需要获取图片的src即可
var data={}data['pic']=$('#picture').attr('src');$.ajax({ 'url':"upload.php", 'data':data, 'type':'post', 'dataType':'json', 'success':function(data){ alert(data.msg); }, 'error':function(data){ alert('上传失败') }, 'complete':function(data){ $('#uploadimg').val('上传完成'); }})
3、后端服务器处理
通过传递过来的图片src可以获取到data-type(即图片类型),在"base64,"之后为图片的内容,该内容已经经过base64编码,因此需要进行转码后进行保存到服务器。
getMessage();}$data = array('success' => $success, 'msg' => $msg);echo json_encode($data);?>