源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

js实现把图片的绝对路径转为base64字符串、blob对象再上传

  • 时间:2020-10-01 21:03 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:js实现把图片的绝对路径转为base64字符串、blob对象再上传
[b]主题:[/b] JavaScript把项目本地的图片或者图片的绝对路径转为base64字符串、blob对象在上传。 [b]用处:[/b] 从本地选择图片上传,如项目规定只能选择本项目文件夹下的图像上传为头像等。 [b]主要思想:[/b] 使用canvas.toDataURL()方法将图片的绝对路径转换为base64编码. [b]具体用法:[/b] 在这我们引用淘宝服务器上的一张图片举例:
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测试,运行时会报错! [b]原因:[/b] 我们使用的是淘宝服务器上的图片,在本地服务器下访问,结果出现图片跨域的问题。 [b]处理方案:[/b] [b]一、将图片放在本地服务器[/b]
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);
  });
[b]二、 跨域[/b] 想引用其他服务器下的图片该如何解决呢? 我们可以使用下面这一句代码解决跨域。 [b]image.crossOrigin = '';[/b] 测试在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>
上面是本功能的完整代码,亲们,可以测试咯! 这样就本地图片和其他服务器上的图片都可以处理了! [b]结语:[/b] 想要了解更多的有关上传头像功能,可参考《[url=http://www.1sucai.cn/article/100023.htm]浅析上传头像示例及其注意事项[/url]》 以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持编程素材网!
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部