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

2016-11-21 19:02:19来源:CSDN作者:ztop_f人点击

第七城市
最近接触的项目中,经常遇到需要canvas绘制图片的需求,比如拼图,比如图片编辑等。canvas处理后的图片必然涉及到保存,因此,下面方法也许是你需要的~
思路:1.使用 toDataURL()方法导出canvas图片,此时得到base64的数据2.将base64数据封装blob对象3.组装FormData4.ajax上传当然,上传过程需要服务端的童鞋来配合,比如设置跨域,比如约定字段。。。一个简陋的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});};
另外,如果需要获取图片的宽高,请参考http://blog.csdn.net/wuchengzhi82/article/details/21466445
第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台