js实现把图片的绝对路径转为base64字符串、blob对象再上传
程序员文章站
2022-05-21 08:42:00
主题:
javascript把项目本地的图片或者图片的绝对路径转为base64字符串、blob对象在上传。
用处:
从本地选择图片上传,如项目规定只能选择本项目文件夹...
主题:
javascript把项目本地的图片或者图片的绝对路径转为base64字符串、blob对象在上传。
用处:
从本地选择图片上传,如项目规定只能选择本项目文件夹下的图像上传为头像等。
主要思想:
使用canvas.todataurl()方法将图片的绝对路径转换为base64编码.
具体用法:
在这我们引用淘宝服务器上的一张图片举例:
var imgsrc = "https://img.alicdn.com/bao/uploaded/tb1qimqipxxxxxbxfxxsutbfxxx.jpg"; // var imgsrc = "img/1.jpg"; function getbase64(img){//传入图片路径,返回base64 function getbase64image(img,width,height) {//width、height调用时传入具体像素值,控制大小 ,不传则默认图像大小 var canvas = document.createelement("canvas"); canvas.width = width ? width : img.width; canvas.height = height ? height : img.height; var ctx = canvas.getcontext("2d"); ctx.drawimage(img, 0, 0, canvas.width, canvas.height); var dataurl = canvas.todataurl(); return dataurl; } var image = new image(); image.src = img; var deferred=$.deferred(); if(img){ image.onload =function (){ deferred.resolve(getbase64image(image));//将base64传给done上传处理 } return deferred.promise();//问题要让onload完成后再return sessionstorage['imgtest'] } } getbase64(imgsrc) .then(function(base64){ console.log(base64); },function(err){ console.log(err); });
此时在chrome测试,运行时会报错!
原因:
我们使用的是淘宝服务器上的图片,在本地服务器下访问,结果出现图片跨域的问题。
处理方案:
一、将图片放在本地服务器
var imgsrc = "img/1.jpg";//本地项目文件夹下的图片 function getbase64(img){//传入图片路径,返回base64 function getbase64image(img,width,height) { var canvas = document.createelement("canvas"); canvas.width = width ? width : img.width; canvas.height = height ? height : img.height; var ctx = canvas.getcontext("2d"); ctx.drawimage(img, 0, 0, canvas.width, canvas.height); var dataurl = canvas.todataurl(); return dataurl; } var image = new image(); image.src = img; var deferred=$.deferred(); if(img){ image.onload =function (){ deferred.resolve(getbase64image(image));//将base64传给done上传处理 } return deferred.promise();//问题要让onload完成后再return sessionstorage['imgtest'] } } getbase64(imgsrc) .then(function(base64){ console.log(base64); },function(err){ console.log(err); });
二、 跨域
想引用其他服务器下的图片该如何解决呢?
我们可以使用下面这一句代码解决跨域。
image.crossorigin = '';
测试在chrome和firefox,ie9+下生效,在目前safari6以下貌似不支持。
<!doctype html> <html> <head> <meta charset="utf-8"> <title>nick getbase64</title> </head> <body> <div><img id="test" src="" alt=""/></div> <script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script> <script> var imgsrc = "https://img.alicdn.com/bao/uploaded/tb1qimqipxxxxxbxfxxsutbfxxx.jpg"; // var imgsrc = "img/1.jpg"; function getbase64(img){//传入图片路径,返回base64 function getbase64image(img,width,height) {//width、height调用时传入具体像素值,控制大小 ,不传则默认图像大小 var canvas = document.createelement("canvas"); canvas.width = width ? width : img.width; canvas.height = height ? height : img.height; var ctx = canvas.getcontext("2d"); ctx.drawimage(img, 0, 0, canvas.width, canvas.height); var dataurl = canvas.todataurl(); return dataurl; } var image = new image(); image.crossorigin = ''; image.src = img; var deferred=$.deferred(); if(img){ image.onload =function (){ deferred.resolve(getbase64image(image));//将base64传给done上传处理 } return deferred.promise();//问题要让onload完成后再return sessionstorage['imgtest'] } } getbase64(imgsrc) .then(function(base64){ console.log(base64); },function(err){ console.log(err); }); </script> </body> </html>
上面是本功能的完整代码,亲们,可以测试咯!
这样就本地图片和其他服务器上的图片都可以处理了!
结语:
想要了解更多的有关上传头像功能,可参考《》
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!