js 图片转base64的方式(两种)


Posted in Javascript onApril 24, 2018

方式一:Blob和FileReader 对象

实现原理:

使用xhr请求图片,并设置返回的文件类型为Blob对象[xhr.responseType = "blob"]

使用FileReader 对象接收blob

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>js 图片转base64方式</title>
</head>
<body>
  <p id="container1"></p>
  <script>
    getBase64("https://z649319834.github.io/Learn_Example/video_track/webvtt.jpg")
    function getBase64(imgUrl) {
      window.URL = window.URL || window.webkitURL;
      var xhr = new XMLHttpRequest();
      xhr.open("get", imgUrl, true);
      // 至关重要
      xhr.responseType = "blob";
      xhr.onload = function () {
        if (this.status == 200) {
          //得到一个blob对象
          var blob = this.response;
          console.log("blob", blob)
          // 至关重要
          let oFileReader = new FileReader();
          oFileReader.onloadend = function (e) {
            let base64 = e.target.result;
            console.log("方式一》》》》》》》》》", base64)
          };
          oFileReader.readAsDataURL(blob);
          //====为了在页面显示图片,可以删除====
          var img = document.createElement("img");
          img.onload = function (e) {
            window.URL.revokeObjectURL(img.src); // 清除释放
          };
          let src = window.URL.createObjectURL(blob);
          img.src = src
          document.getElementById("container1").appendChild(img);
          //====为了在页面显示图片,可以删除====

        }
      }
      xhr.send();
    }
  </script>
</body>
</html>

方式二:canvas.toDataURL()方法

实现原理:

使用canvas.toDataURL()方法

需要解决图片跨域问题 image.crossOrigin = '';

使用了Jquery库的$.Deferred()方法

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>js 图片转base64方式</title>
</head>
<body>
<p id="container2"></p>
  <script src="https://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script>
  <script>
    let imgSrc = "https://z649319834.github.io/Learn_Example/video_track/webvtt.jpg";

    //width、height调用时传入具体像素值,控制大小 ,不传则默认图像大小
    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;
    }
    function getCanvasBase64(img) {
      var image = new Image();
      //至关重要
      image.crossOrigin = '';
      image.src = img;
      //至关重要
      var deferred = $.Deferred();
      if (img) {
        image.onload = function () {
          deferred.resolve(getBase64Image(image));//将base64传给done上传处理
          document.getElementById("container2").appendChild(image);
        }
        return deferred.promise();//问题要让onload完成后再return sessionStorage['imgTest']
      }
    }
    getCanvasBase64(imgSrc)
      .then(function (base64) {
        console.log("方式二》》》》》》》》》",base64);
      }, function (err) {
        console.log(err);
      });
  </script>
</body>
</html>

demo展示

图片Base64

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript 自动分号插入(JavaScript synat:auto semicolon insertion)
Nov 04 Javascript
javascript 打开页面window.location和window.open的区别
Mar 17 Javascript
处理及遍历XML文档DOM元素属性及方法整理
Aug 23 Javascript
Node.js中require的工作原理浅析
Jun 24 Javascript
javascript中数组的定义及使用实例
Jan 21 Javascript
用NODE.JS中的流编写工具是要注意的事项
Mar 01 Javascript
jQuery 获取页面li数组并删除不在数组中的key
Aug 02 Javascript
javascript 显示全局变量与隐式全局变量的区别
Feb 09 Javascript
vue bootstrap小例子一枚
Jun 09 Javascript
详解VUE2.X过滤器的使用方法
Jan 11 Javascript
使用vue2实现购物车和地址选配功能
Mar 29 Javascript
Javascript 类型转换、封闭函数及常见内置对象操作示例
Nov 15 Javascript
react配合antd组件实现的管理系统示例代码
Apr 24 #Javascript
详解开发react应用最好用的脚手架 create-react-app
Apr 24 #Javascript
vue webpack实用技巧总结
Apr 24 #Javascript
浅谈vue中.vue文件解析流程
Apr 24 #Javascript
vue-cli2.9.3 详细教程
Apr 23 #Javascript
vue.js数据绑定操作详解
Apr 23 #Javascript
jQuery+ajax实现动态添加表格tr td功能示例
Apr 23 #jQuery
You might like
无数据库的详细域名查询程序PHP版(3)
2006/10/09 PHP
php中simplexml_load_string使用实例分享
2014/02/13 PHP
PHP迭代器和生成器用法实例分析
2019/09/28 PHP
JS 实现导航栏悬停效果
2013/09/23 Javascript
简单谈谈javascript中this的隐式绑定
2016/02/22 Javascript
Javascript快速实现浏览器系统通知
2017/08/26 Javascript
详解JavaScript中的六种错误类型
2017/09/21 Javascript
angularJS自定义directive之带参方法传递详解
2018/10/09 Javascript
微信小程序实现弹出菜单动画
2019/06/21 Javascript
基于Vue 撸一个指令实现拖拽功能
2019/10/09 Javascript
js实现时间日期校验
2020/05/26 Javascript
VUE 单页面使用 echart 窗口变化时的用法
2020/07/30 Javascript
分享8个JavaScript库可更好地处理本地存储
2020/10/12 Javascript
微信小程序实现分页加载效果
2020/11/19 Javascript
python协程用法实例分析
2015/06/04 Python
Python中的urllib模块使用详解
2015/07/07 Python
Python实现图片转字符画的示例代码
2017/08/21 Python
python3.x上post发送json数据
2018/03/04 Python
pandas中的DataFrame按指定顺序输出所有列的方法
2018/04/10 Python
通过python的matplotlib包将Tensorflow数据进行可视化的方法
2019/01/09 Python
python lambda表达式在sort函数中的使用详解
2019/08/28 Python
解决Python3下map函数的显示问题
2019/12/04 Python
Python字符串hashlib加密模块使用案例
2020/03/10 Python
Python中使用threading.Event协调线程的运行详解
2020/05/02 Python
浅析Python面向对象编程
2020/07/10 Python
python两种注释用法的示例
2020/10/09 Python
DHC中国官方购物网站:日本通信销售No.1化妆品
2016/08/20 全球购物
Ooni英国官网:披萨烤箱
2020/05/31 全球购物
仓库管理专业个人的自我评价
2013/12/30 职场文书
计算机网络专业求职信
2014/06/05 职场文书
停车位租赁协议书
2014/09/24 职场文书
行政人事主管岗位职责
2015/04/11 职场文书
2015年青年教师工作总结
2015/05/25 职场文书
建国大业观后感800字
2015/06/01 职场文书
生日宴会祝酒词
2015/08/10 职场文书
新郎父母婚礼答谢词
2015/09/29 职场文书