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 相关文章推荐
ExtJS 设置级联菜单的默认值
Jun 13 Javascript
用原生JavaScript实现jQuery的$.getJSON的解决方法
May 03 Javascript
JQuery获取表格数据示例代码
May 26 Javascript
javascript实现表单提交后,提交按钮不可用的方法
Apr 18 Javascript
javascript html5移动端轻松实现文件上传
Mar 27 Javascript
JS实现的跨浏览器解析XML文件实例
Jun 21 Javascript
详解使用angular-cli发布i18n多国语言Angular应用
May 20 Javascript
关于meta viewport中target-densitydpi属性详解(推荐)
Aug 18 Javascript
详解vue-cli构建项目反向代理配置
Sep 07 Javascript
微信小程序常用赋值方法小结
Apr 30 Javascript
JavaScript布尔运算符原理使用解析
May 06 Javascript
JS轮播图的实现方法2
Aug 25 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中的时间显示
2007/01/18 PHP
发布一个迷你php+AJAX聊天程序[聊天室]提供下载
2007/07/21 PHP
使ecshop模板中可引用常量的实现方法
2011/06/02 PHP
用mysql_fetch_array()获取当前行数据的方法详解
2013/06/05 PHP
php使用Session和文件统计在线人数
2015/07/04 PHP
PHP实现搜索相似图片
2015/09/22 PHP
thinkphp3.2.3版本的数据库增删改查实现代码
2016/09/22 PHP
Open and Print a Word Document
2007/06/15 Javascript
javascript removeChild 使用注意事项
2009/04/11 Javascript
JS中实现replaceAll的方法(实例代码)
2013/11/12 Javascript
js防止DIV布局滚动时闪动的解决方法
2014/10/30 Javascript
Jsonp 关键字详解及json和jsonp的区别,ajax和jsonp的区别
2015/12/30 Javascript
jQuery模拟物体自由落体运动(附演示与demo源码下载)
2016/01/21 Javascript
js给table赋值的实例代码
2016/10/13 Javascript
Javascript实现汉字和拼音互转的终极方案
2016/10/19 Javascript
jquery实现百叶窗效果
2017/01/12 Javascript
解析NodeJS异步I/O的实现
2017/04/13 NodeJs
Vue.js 实现数据展示全部和收起功能
2018/09/05 Javascript
javascript严格模式详解(含严格模式与非严格模式的区别)
2019/11/12 Javascript
node实现mock-plugin中间件的方法
2019/12/25 Javascript
[49:35]2018DOTA2亚洲邀请赛3月30日 小组赛A组 KG VS TNC
2018/03/31 DOTA
Python类方法__init__和__del__构造、析构过程分析
2015/03/06 Python
在Django的模型中添加自定义方法的示例
2015/07/21 Python
Python实现批量转换文件编码的方法
2015/07/28 Python
Python利用turtle库绘制彩虹代码示例
2017/12/20 Python
Python读取stdin方法实例
2019/05/24 Python
Python单元测试与测试用例简析
2019/11/09 Python
python实现KNN近邻算法
2020/12/30 Python
美国一家全面的在线零售鞋类公司:SHOEBACCA
2017/01/06 全球购物
世界上第一个创建了罩杯系统的美国内衣品牌:Maidenform
2019/03/23 全球购物
教育系毕业生中文求职信范文
2013/10/06 职场文书
食品行业求职人的自我评价
2014/01/19 职场文书
副护士长竞聘演讲稿
2014/04/30 职场文书
新文化运动的基本口号
2014/06/21 职场文书
实习证明模板
2015/06/16 职场文书
mybatis使用oracle进行添加数据的方法
2021/04/27 Oracle