博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript把项目本地的图片或者图片的绝对路径转为base64字符串、blob对象在上传...
阅读量:4959 次
发布时间:2019-06-12

本文共 2705 字,大约阅读时间需要 9 分钟。

主题:

  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以下貌似不支持。
  
nick getBase64

  上面是本功能的完整代码,亲们,可以测试咯!

  这样就本地图片和其他服务器上的图片都可以处理了!

结语:

  

  本功能我在项目中用于规定只能选择本项目文件夹下的图像上传为头像或封面等,我将会具体分析出该功能的实现,最后在将完整代码附上!

  其中,涉及到了deferred,我将在下篇博客中总结一下,在附上地址!

  本博客中有改正的地方,望各位大大不吝赐教,多多留言、评论、批评……

  
 

 

转载于:https://www.cnblogs.com/puyongsong/p/6005800.html

你可能感兴趣的文章
快速上手git
查看>>
Java中去除字符串中的所有空格
查看>>
EF自动创建数据库步骤之四(启用数据库初始器)
查看>>
2019.7.28刷题统计
查看>>
python学习day05练习--购物车
查看>>
转战简书
查看>>
idea启动tomcat时报错 Address localhost:1099 is already in use
查看>>
Visual DSP定点数(fract)使用指南
查看>>
从excel表格加载数据返回DataSet
查看>>
kernel笔记——网络收发包流程
查看>>
【js】逻辑运算符 && 、|| ,位运算符 | 、&
查看>>
python-open-cv 自动人脸识别安装包
查看>>
js 数字前自动补零
查看>>
Shell脚本书写规范
查看>>
P1036 选数
查看>>
浅谈C/C++中的typedef和#define
查看>>
Locust 性能测试工具安装使用说明
查看>>
二分图匹配
查看>>
【树莓派】双网卡添加多路由静态路由持久化的问题处理
查看>>
Installing TensorFlow on Ubuntu
查看>>