第一步:照片上传
<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; } //
完毕~
posted on
浙公网安备 33010602011771号