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中令你抓狂的魔术变量
Nov 30 Javascript
如何快速的呈现我们的网页的技巧整理
Jul 01 Javascript
JavaScript 对象模型 执行模型
Dec 06 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器(优化篇)
Jun 28 Javascript
JavaScript省市联动实现代码
Feb 15 Javascript
jQuery+Ajax+PHP+Mysql实现分页显示数据实例讲解
Sep 27 Javascript
jQuery实现简单滚动动画效果
Apr 07 Javascript
JavaScript两个变量交换值的实现方法
Mar 01 Javascript
socket.io学习教程之深入学习篇(三)
Apr 29 Javascript
深入理解React高阶组件
Sep 28 Javascript
如何以Angular的姿势打开Font-Awesome详解
Apr 22 Javascript
jQuery高级编程之js对象、json与ajax用法实例分析
Nov 01 jQuery
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调用三种数据库的方法(2)
2006/10/09 PHP
PHP下通过exec获得计算机的唯一标识[CPU,网卡 MAC地址]
2011/06/09 PHP
PHP中unset,array_splice删除数组中元素的区别
2014/07/28 PHP
浅谈ThinkPHP的URL重写
2014/11/25 PHP
在PHP 7下安装Swoole与Yar,Yaf的方法教程
2017/06/02 PHP
JavaScript 仿关机效果的图片层
2008/12/26 Javascript
[推荐]javascript 面向对象技术基础教程
2009/03/03 Javascript
模仿JQuery.extend函数扩展自己对象的js代码
2009/12/09 Javascript
用js脚本控制asp.net下treeview的NodeCheck的实现代码
2010/03/02 Javascript
jquery 圆形旋转图片滚动切换效果
2011/01/19 Javascript
jquery常用操作小结
2014/07/21 Javascript
Node.js 的异步 IO 性能探讨
2014/10/08 Javascript
Javascript中innerHTML用法实例分析
2015/01/12 Javascript
微信WeixinJSBridge API使用实例
2015/05/25 Javascript
javascript汉字拼音互转的简单实例
2016/10/09 Javascript
详解Vue 普通对象数据更新与 file 对象数据更新
2017/04/26 Javascript
jQuery实现动态添加、删除按钮及input输入框的方法
2017/04/27 jQuery
基于JavaScript实现弹幕特效
2020/08/27 Javascript
JS简单实现动态添加HTML标记的方法示例
2018/04/08 Javascript
js实现图片上传并预览功能
2018/08/06 Javascript
浅谈webpack构建工具配置和常用插件总结
2020/05/11 Javascript
python中lambda与def用法对比实例分析
2015/04/30 Python
使用tensorflow实现VGG网络,训练mnist数据集方式
2020/05/26 Python
全球最大的游戏市场:G2A
2018/07/05 全球购物
贝佳斯官方网站:Borghese
2020/05/08 全球购物
Unix如何添加新的用户
2014/08/20 面试题
考试诚信承诺书
2014/05/23 职场文书
反四风个人对照检查材料
2014/09/26 职场文书
房屋出售授权委托书
2014/10/12 职场文书
烈士陵园观后感
2015/06/08 职场文书
治庸问责工作总结
2015/08/11 职场文书
一封真诚的自荐信帮你赢得机会
2019/05/07 职场文书
解析Java中的static关键字
2021/06/14 Java/Android
mysql事务对效率的影响分析总结
2021/10/24 MySQL
分享几个简单MySQL优化小妙招
2022/03/31 MySQL
MySQL中TIMESTAMP类型返回日期时间数据中带有T的解决
2022/12/24 MySQL