全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

js实现把图片的绝对路径转为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>

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

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

结语:

想要了解更多的有关上传头像功能,可参考《浅析上传头像示例及其注意事项》

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!


# js  # 图片上传  # js 图片转base64的方式(两种)  # js 将图片连接转换成base64格式的简单实例  # js 显示base64编码的二进制流网页图片  # js将图片转base64的两种实现方法  # 基于JavaScript获取base64图片大小  # JS将图片转Base64的2种方法代码  # 上传  # 要让  # 器上  # 完成后  # 淘宝  # 的是  # 不传  # 这一  # 放在  # 在这  # 不支持  # 可以使用  # 该如何  # 报错  # 转换为  # 传为  # getBase64Image  # ctx  # width 


相关文章: 高性价比服务器租赁——企业级配置与24小时运维服务  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  广州网站建站公司选择指南:建站流程与SEO优化关键词解析  如何通过WDCP绑定主域名及创建子域名站点?  网站制作软件免费下载安装,有哪些免费下载的软件网站?  学校免费自助建站系统:智能生成+拖拽设计+多端适配  清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?  建站主机是否属于云主机类型?  建设网站制作价格,怎样建立自己的公司网站?  香港服务器选型指南:免备案配置与高效建站方案解析  建站之星在线客服如何快速接入解答?  北京网站制作公司哪家好一点,北京租房网站有哪些?  建站之星上传入口如何快速找到?  如何快速搭建安全的FTP站点?  Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解  如何在服务器上三步完成建站并提升流量?  如何用搬瓦工VPS快速搭建个人网站?  浅析上传头像示例及其注意事项  宁波自助建站系统如何快速打造专业企业网站?  开封网站制作公司,网络用语开封是什么意思?  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?  深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?  宝塔建站教程:一键部署配置流程与SEO优化实战指南  Swift开发中switch语句值绑定模式  c# 在高并发下使用反射发射(Reflection.Emit)的性能  网页设计与网站制作内容,怎样注册网站?  如何选择网络建站服务器?高效建站必看指南  潮流网站制作头像软件下载,适合母子的网名有哪些?  如何快速搭建高效WAP手机网站?  利用JavaScript实现拖拽改变元素大小  实例解析Array和String方法  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  模具网站制作流程,如何找模具客户?  打鱼网站制作软件,波克捕鱼官方号怎么注册?  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  如何在香港服务器上快速搭建免备案网站?  php8.4新语法match怎么用_php8.4match表达式替代switch【方法】  如何通过智能用户系统一键生成高效建站方案?  上海网站制作开发公司,上海买房比较好的网站有哪些?  制作公司内部网站有哪些,内网如何建网站?  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】  如何快速使用云服务器搭建个人网站?  javascript中对象的定义、使用以及对象和原型链操作小结  武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?  建站之星安装提示数据库无法连接如何解决?  建站主机默认首页配置指南:核心功能与访问路径优化  Android滚轮选择时间控件使用详解  如何快速生成ASP一键建站模板并优化安全性? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。