导出HTML5 Canvas图片并上传服务器功能

这篇文章主要介绍了导出HTML5 Canvas图片并上传服务器功能,文中经过实例代码给你们介绍了HTML5 Canvas转化成图片后上传服务器,代码简单易懂很是不错,具备必定的参考借鉴价值,须要的朋友能够参考下html

 

导出HTML5 Canvas图片,并上传服务器前端

最近接触的项目中,常常遇到须要canvas绘制图片的需求,好比拼图,好比图片编辑等。canvas处理后的图片必然涉及到保存,html5

所以,下面方法也许是你须要的~ajax

思路:canvas

1.使用 toDataURL()方法导出canvas图片,此时获得base64的数据api

2.将base64数据封装blob对象跨域

3.组装FormData服务器

4.ajax上传app

固然,上传过程须要服务端的童鞋来配合,好比设置跨域,好比约定字段。。。网站

一个简陋的demo:

function handleSave () { //导出base64格式的图片数据
        var mycanvas = document.getElementById("mycanvas"); var base64Data = mycanvas.toDataURL("image/jpeg", 1.0); //封装blob对象
        var blob = dataURItoBlob(base64Data); //组装formdata
        var fd = new FormData(); fd.append("fileData", blob);//fileData为自定义
        fd.append("fileName", "123jpg");//fileName为自定义,名字随机生成或者写死,看需求
        //ajax上传,ajax的形式随意,JQ的写法也没有问题
        //须要注意的是服务端须要设定,容许跨域请求。数据接收的方式和<input type="file"/> 上传的文件没有区别
        var xmlHttp = new XMLHttpRequest(); xmlHttp.open("POST", “你发送上传请求的url”); xmlHttp.setRequestHeader("Authorization", 'Bearer ' + localStorage.token);//设置请求header,按需设定,非必须
 xmlHttp.send(fd); //ajax回调
        xmlHttp.onreadystatechange = () => { //todo your code...
 }; }; function dataURItoBlob (base64Data) { var byteString; if (base64Data.split(',')[0].indexOf('base64') >= 0) byteString = atob(base64Data.split(',')[1]); else byteString = unescape(base64Data.split(',')[1]); var mimeString = base64Data.split(',')[0].split(':')[1].split(';')[0]; var ia = new Uint8Array(byteString.length); for (var i = 0; i < byteString.length; i++) { ia[i] = byteString.charCodeAt(i); } return new Blob([ia], {type: mimeString}); };

知识点扩展:

HTML5 Canvas转化成图片后上传服务器

function b64ToUint8Array(b64Image) { var img = atob(b64Image.split(',')[1]); var img_buffer = []; var i = 0; while (i < img.length) { img_buffer.push(img.charCodeAt(i)); i++; } return new Uint8Array(img_buffer); } var b64Image = canvas.toDataURL('image/jpeg'); var u8Image  = b64ToUint8Array(b64Image); var formData = new FormData(); formData.append("image", new Blob([ u8Image ], {type: "image/jpg"})); var xhr = new XMLHttpRequest(); xhr.open("POST", "/api/upload", true); xhr.send(formData);

用上面这种方式在前端经过js处理,server端不须要进行任何额外处理。

我认为是最方便最直接的办法,反而不少高赞回复,须要server进行各类处理,不推荐。

Had to convert canvas Base64-encoded image to  Uint8Array Blob .

参考: https://stackoverflow.com/questions/13198131/how-to-save-an-html5-canvas-as-an-image-on-a-server

总结

以上所述是小编给你们介绍的导出HTML5 Canvas图片并上传服务器功能,但愿对你们有所帮助,若是你们有任何疑问请给我留言,小编会及时回复你们的。在此也很是感谢你们对脚本之家网站的支持!若是你以为本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

相关文章
相关标签/搜索