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

发布时间 - 2026-01-10 22:12:21    点击率:

主题:

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 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 佛山网站制作系统,佛山企业变更地址网上办理步骤?  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  如何确保FTP站点访问权限与数据传输安全?  如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】  深圳网站制作的公司有哪些,dido官方网站?  HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】  Linux网络带宽限制_tc配置实践解析【教程】  打造顶配客厅影院,这份100寸电视推荐名单请查收  Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  Laravel如何处理和验证JSON类型的数据库字段  如何在宝塔面板中创建新站点?  如何快速生成可下载的建站源码工具?  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  黑客如何通过漏洞一步步攻陷网站服务器?  MySQL查询结果复制到新表的方法(更新、插入)  Laravel怎么在Controller之外的地方验证数据  Python结构化数据采集_字段抽取解析【教程】  Laravel如何使用Blade模板引擎?(完整语法和示例)  Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南  LinuxShell函数封装方法_脚本复用设计思路【教程】  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】  简历没回改:利用AI润色让你的文字更专业  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  Laravel如何使用withoutEvents方法临时禁用模型事件  Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试  Python并发异常传播_错误处理解析【教程】  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践  jQuery validate插件功能与用法详解  如何用虚拟主机快速搭建网站?详细步骤解析  JavaScript实现Fly Bird小游戏  PHP正则匹配日期和时间(时间戳转换)的实例代码  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  Laravel如何升级到最新版本?(升级指南和步骤)  高防服务器如何保障网站安全无虞?  ,交易猫的商品怎么发布到网站上去?  如何用PHP快速搭建高效网站?分步指南  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  Laravel Admin后台管理框架推荐_Laravel快速开发后台工具  HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】  Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?  Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康  如何在万网开始建站?分步指南解析  如何挑选优质建站一级代理提升网站排名?  android nfc常用标签读取总结  如何在建站之星网店版论坛获取技术支持?  php在windows下怎么调试_phpwindows环境调试操作说明【操作】