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 21 Javascript
jquery模拟按下回车实现代码
Sep 20 Javascript
基于jquery完美拖拽,可返回拖动轨迹
Mar 29 Javascript
javascript省市级联功能实现方法实例详解
Oct 20 Javascript
jQuery进行组件开发完整实例
Dec 15 Javascript
jQuery+ajax实现滚动到页面底部自动加载图文列表效果(类似图片懒加载)
Jun 07 Javascript
JS字符串false转boolean的方法(推荐)
Mar 08 Javascript
使用webpack打包后的vue项目如何正确运行(express)
Oct 26 Javascript
JavaScript变速动画函数封装添加任意多个属性
Apr 03 Javascript
JavaScript 替换所有匹配内容及正则替换方法
Feb 12 Javascript
jQuery实现飞机大战小游戏
Jul 05 jQuery
vue 实现弹窗关闭后刷新效果
Apr 08 Vue.js
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 使用post,get的一种简洁方式
2010/04/25 PHP
php下载文件的代码示例
2012/06/29 PHP
精美漂亮的php分页类代码
2013/04/02 PHP
详谈PHP文件目录基础操作
2014/11/11 PHP
PHP远程连接oracle数据库操作实现方法图文详解
2019/04/11 PHP
php文件操作之文件写入字符串、数组的方法分析
2019/04/15 PHP
jquery构造器的实现代码小结
2011/05/16 Javascript
js图片延迟加载的实现方法及思路
2013/07/22 Javascript
时间戳转换为时间 年月日时间的JS函数
2013/08/19 Javascript
js时间戳格式化成日期格式的多种方法
2013/11/11 Javascript
解决js中window.open弹出的是上次的缓存页面问题
2013/12/29 Javascript
JavaScript使用FileSystemObject对象写入文本文件内容的方法
2015/08/05 Javascript
JS实现超简洁网页title标题跑动闪烁提示效果代码
2015/10/23 Javascript
Nodejs如何搭建Web服务器
2016/03/28 NodeJs
D3.js封装文本实现自动换行和旋转平移等功能
2016/10/14 Javascript
JavaScript给每一个li节点绑定点击事件的实现方法
2016/12/01 Javascript
javascript如何用递归写一个简单的树形结构示例
2017/09/06 Javascript
JavaScript内存泄漏的处理方式
2017/11/20 Javascript
JS中offset和匀速动画详解
2018/02/06 Javascript
vue使用el-upload上传文件及Feign服务间传递文件的方法
2019/03/15 Javascript
JS中实现一个下载进度条及播放进度条的代码
2019/06/10 Javascript
小程序自定义圆形进度条
2020/11/17 Javascript
[00:57]英雄,你的补给到了!
2020/11/13 DOTA
跟老齐学Python之变量和参数
2014/10/10 Python
深入学习python的yield和generator
2016/03/10 Python
python直接访问私有属性的简单方法
2016/07/25 Python
Python Json序列化与反序列化的示例
2018/01/31 Python
python之从文件读取数据到list的实例讲解
2018/04/19 Python
python3 对list中每个元素进行处理的方法
2018/06/29 Python
python通过移动端访问查看电脑界面
2020/01/06 Python
TripAdvisor西班牙官方网站:全球领先的旅游网站
2018/01/10 全球购物
购买英国原创艺术:Art Gallery
2018/08/25 全球购物
质检部部长职责
2013/12/16 职场文书
服务标语大全
2014/06/18 职场文书
英语课外活动总结
2014/08/27 职场文书
环境卫生标语
2015/08/03 职场文书