第一步:照片上传
<input class="js_upFile" type="file" name="cover" accept="image/*" capture="camera" multiple/> // 获取浏览器的userAgent var agent=navigator.userAgent.toLowerCase(); var isIos=(agent.indexOf('iphone') != -1) || (agent.indexOf('ipad') !=-1); if(isIos) { $(".js_upFile").removeAttr("capture"); //在苹果上,只要有capture="camera",它就只打开照相机,其他情况下,相册,相机都会有 }
第二步:展示上传的图片及初始化裁剪功能
$(".js_upFile").change(function(e){ if(test(this.value)==false) { alert('格式错误!'); return; } var objUrl = getObjectURL(this.files[0]); if (objUrl) { //预览图片 $("#image").attr("src",objUrl); //初始化裁剪插件,cropper var cropperImage = document.getElementById('image'); cropper = new Cropper(cropperImage, { dragMode: 'move', aspectRatio: 1, viewMode: 1, restore: false, guides: false, center: false, highlight: false, cropBoxMovable: false, cropBoxResizable: false, toggleDragModeOnDblclick: false, crop: function(e) { } }); } }); //创建一个可存取file的url function getObjectURL(file) { var url = null ; if (window.createObjectURL!=undefined) { // basic url = window.createObjectURL(file) ; } else if (window.URL!=undefined) { // mozilla(firefox) url = window.URL.createObjectURL(file) ; } else if (window.webkitURL!=undefined) { // webkit or chrome url = window.webkitURL.createObjectURL(file) ; } return url ; } //图片格式 function test(value) { var regexp=new RegExp("(.JPEG|.jpeg|.JPG|.jpg|.PNG|.png)$",'g'); return regexp.test(value); }
第三步:裁剪完成,获取图片
// 确认裁剪,保存图片 $(".sure").click(function(){ // 这里获取到的是base64,如果保存base64到服务器,直接用此值 var data_src=cropper.getCroppedCanvas().toDataURL('image/png'); //销毁 cropper.destroy(); $("#image").attr("src",""); }); // 一般情况下,上传文件比传base64要好,理由:大文件上传会因为网络问题导致不稳 //定, 所以,一般上传大小有限制,而base64体积都会增大,尤其大图片(此处给我公司 //CTO来个掌声(虽然你不知道他是谁),很有技术追求) $(".sure").click(function(){ var ImageURL=cropper.getCroppedCanvas().toDataURL('image/png'); var block = ImageURL.split(";"); var contentType = block[0].split(":")[1]; var realData = block[1].split(",")[1]; // base64转blob var blob = b64toBlob(realData, contentType); // blob转file var newFile= new File([blob], "filename.png",{type:contentType}) // 此处调用plupload进行上传,省略了初始化代码,看者自己搜用法 uploader.addFile(newFile); uploader.start(); //销毁 cropper.destroy(); $("#image").attr("src",""); }); // blob相关知识查看我的博文:https://www.cnblogs.com/lichunyan/p/9187286.html function b64toBlob(b64Data, contentType, sliceSize) { contentType = contentType || ''; sliceSize = sliceSize || 512; var byteCharacters = atob(b64Data); var byteArrays = []; for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) { var slice = byteCharacters.slice(offset, offset + sliceSize); var byteNumbers = new Array(slice.length); for (var i = 0; i < slice.length; i++) { byteNumbers[i] = slice.charCodeAt(i); } var byteArray = new Uint8Array(byteNumbers); byteArrays.push(byteArray); } var blob = new Blob(byteArrays, {type: contentType}); return blob; } //
完毕~