怎么实现在HTML5中使用Canvas将图片导出上传服务器
这篇文章将为大家详细讲解有关怎么实现在HTML5中使用Canvas将图片导出上传服务器,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
思路:
1.使用 toDataURL()方法导出canvas图片,此时得到base64的数据
2.将base64数据封装blob对象
3.组装FormData
4.ajax上传
当然,上传过程需要服务端的童鞋来配合,比如设置跨域,比如约定字段。。。
一个简陋的demo:
functionhandleSave(){//导出base64格式的图片数据varmycanvas=document.getElementById("mycanvas");varbase64Data=mycanvas.toDataURL("image/jpeg",1.0);//封装blob对象varblob=dataURItoBlob(base64Data);//组装formdatavarfd=newFormData();fd.append("fileData",blob);//fileData为自定义fd.append("fileName","123jpg");//fileName为自定义,名字随机生成或者写死,看需求//ajax上传,ajax的形式随意,JQ的写法也没有问题//需要注意的是服务端需要设定,允许跨域请求。数据接收的方式和<inputtype="file"/>上传的文件没有区别varxmlHttp=newXMLHttpRequest();xmlHttp.open("POST",“你发送上传请求的url”);xmlHttp.setRequestHeader("Authorization",'Bearer'+localStorage.token);//设置请求header,按需设定,非必须xmlHttp.send(fd);//ajax回调xmlHttp.onreadystatechange=()=>{//todoyourcode...};};functiondataURItoBlob(base64Data){varbyteString;if(base64Data.split(',')[0].indexOf('base64')>=0)byteString=atob(base64Data.split(',')[1]);elsebyteString=unescape(base64Data.split(',')[1]);varmimeString=base64Data.split(',')[0].split(':')[1].split(';')[0];varia=newUint8Array(byteString.length);for(vari=0;i<byteString.length;i++){ia[i]=byteString.charCodeAt(i);}returnnewBlob([ia],{type:mimeString});};
知识点扩展:
HTML5 Canvas转化成图片后上传服务器
functionb64ToUint8Array(b64Image){varimg=atob(b64Image.split(',')[1]);varimg_buffer=[];vari=0;while(i<img.length){img_buffer.push(img.charCodeAt(i));i++;}returnnewUint8Array(img_buffer);}varb64Image=canvas.toDataURL('image/jpeg');varu8Image=b64ToUint8Array(b64Image);varformData=newFormData();formData.append("image",newBlob([u8Image],{type:"image/jpg"}));varxhr=newXMLHttpRequest();xhr.open("POST","/api/upload",true);xhr.send(formData);
用上面这种方式在前端通过js处理,server端不需要进行任何额外处理。
我认为是最方便最直接的办法,反而很多高赞回复,需要server进行各种处理,不推荐。
Had to convert canvas Base64-encoded image to Uint8Array Blob .
关于“怎么实现在HTML5中使用Canvas将图片导出上传服务器”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。