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 相关文章推荐
AJAX的跨域与JSONP(为文章自动添加短址的功能)
Jan 17 Javascript
jqeury eval将字符串转换json的方法
Jan 20 Javascript
用js来刷新当前页面保留参数的具体实现
Dec 23 Javascript
javascript 用函数实现继承详解
May 28 Javascript
javascript 小数乘法结果错误的处理方法
Jul 28 Javascript
jQuery Easyui datagrid editor为combobox时指定数据源实例
Dec 19 Javascript
简单实现Vue的observer和watcher
Dec 21 Javascript
JS查找字符串中出现最多的字符及个数统计
Feb 04 Javascript
基于AngularJS的拖拽文件上传的实例代码
Jul 15 Javascript
webpack的CSS加载器的使用
Sep 11 Javascript
vue+iview 兼容IE11浏览器的实现方法
Jan 07 Javascript
使用compose函数优化代码提高可读性及扩展性
Jun 16 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判断服务器是否是HTTPS连接
2013/07/05 PHP
又拍云异步上传实例教程详解
2016/04/19 PHP
PHP中的函数声明与使用详解
2017/05/27 PHP
(function(){})()的用法与优点
2007/03/11 Javascript
javascript,jquery闭包概念分析
2010/06/19 Javascript
dreamweaver 安装Jquery智能提示
2011/04/02 Javascript
关于jQuery中的each方法(jQuery到底干了什么)
2014/03/05 Javascript
Angular.js与Bootstrap相结合实现手风琴菜单代码
2016/04/13 Javascript
原生js实现ajax方法(超简单)
2016/09/20 Javascript
用vue快速开发app的脚手架工具
2018/06/11 Javascript
Layer组件多个iframe弹出层打开与关闭及参数传递的方法
2019/09/25 Javascript
微信小程序绑定手机号获取验证码功能
2019/10/22 Javascript
Echarts.js无法引入问题解决方案
2020/10/30 Javascript
Python安装Imaging报错:The _imaging C module is not installed问题解决方法
2014/08/22 Python
Python将阿拉伯数字转换为罗马数字的方法
2015/07/10 Python
解决出现Incorrect integer value: '' for column 'id' at row 1的问题
2017/10/29 Python
Python多线程扫描端口代码示例
2018/02/09 Python
python机器学习之KNN分类算法
2018/08/29 Python
Python基于datetime或time模块分别获取当前时间戳的方法实例
2019/02/19 Python
Python机器学习算法库scikit-learn学习之决策树实现方法详解
2019/07/04 Python
Python Django简单实现session登录注销过程详解
2019/08/06 Python
关于tensorflow的几种参数初始化方法小结
2020/01/04 Python
python基本算法之实现归并排序(Merge sort)
2020/09/01 Python
意大利辅助药品、药物和补品在线销售:FarmaEurope
2020/04/29 全球购物
Weblogic的布署方式
2013/08/23 面试题
软件生产职位结构化面试主要考察要素及面试题库
2015/06/12 面试题
生产车间主任的个人自我鉴定
2013/10/25 职场文书
毕业生应聘幼儿园的自荐信
2013/11/20 职场文书
新学期国旗下演讲稿
2014/05/08 职场文书
航海技术专业毕业生推荐信
2014/07/09 职场文书
科学发展观演讲稿
2014/09/11 职场文书
普通党员个人剖析材料
2014/10/08 职场文书
基层党组织整改方案
2014/10/25 职场文书
学校会议通知范文
2015/04/15 职场文书
工作建议书范文
2019/07/08 职场文书
Java循环队列与非循环队列的区别总结
2021/06/22 Java/Android