第一步:照片上傳html
<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",它就只打開照相機,其餘狀況下,相冊,相機都會有 }
第二步:展現上傳的圖片及初始化裁剪功能web
$(".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); }
第三步:裁剪完成,獲取圖片chrome
// 確認裁剪,保存圖片 $(".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相關知識查看個人博文:http://www.javashuo.com/article/p-fnxqzsfb-gy.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; } //
完畢~瀏覽器