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


相关推荐: 北京网站制作的公司有哪些,北京白云观官方网站?  Python文件操作最佳实践_稳定性说明【指导】  EditPlus中的正则表达式实战(5)  Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧  如何在阿里云虚拟主机上快速搭建个人网站?  Laravel怎么为数据库表字段添加索引以优化查询  高防服务器租用指南:配置选择与快速部署攻略  LinuxShell函数封装方法_脚本复用设计思路【教程】  如何在阿里云ECS服务器部署织梦CMS网站?  Laravel如何配置任务调度?(Cron Job示例)  如何快速生成高效建站系统源代码?  Laravel如何自定义分页视图?(Pagination示例)  瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口  php json中文编码为null的解决办法  laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  详解Android中Activity的四大启动模式实验简述  Laravel如何升级到最新版本?(升级指南和步骤)  Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  如何在万网自助建站平台快速创建网站?  Linux安全能力提升路径_长期防护思维说明【指导】  iOS验证手机号的正则表达式  iOS中将个别页面强制横屏其他页面竖屏  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  如何快速搭建支持数据库操作的智能建站平台?  如何在腾讯云服务器上快速搭建个人网站?  Laravel如何与Inertia.js和Vue/React构建现代单页应用  米侠浏览器网页背景异常怎么办 米侠显示修复  Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法  教学论文网站制作软件有哪些,写论文用什么软件 ?  如何在建站宝盒中设置产品搜索功能?  免费视频制作网站,更新又快又好的免费电影网站?  Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】  如何撰写建站申请书?关键要点有哪些?  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  如何有效防御Web建站篡改攻击?  千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】  Laravel如何使用Vite进行前端资源打包?(配置示例)  香港服务器租用费用高吗?如何避免常见误区?  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】  EditPlus中的正则表达式 实战(4)  香港服务器如何优化才能显著提升网站加载速度?  Laravel如何使用.env文件管理环境变量?(最佳实践)