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 TextField常用方法
Oct 07 Javascript
JS动态调用方法名示例介绍
Dec 18 Javascript
jQuery调用ajax请求的常见方法汇总
Mar 24 Javascript
js判断浏览器是否支持严格模式的方法
Oct 04 Javascript
JavaScript触发onScroll事件的函数节流详解
Dec 14 Javascript
原生和jQuery的ajax用法详解
Jan 23 Javascript
微信小程序page的生命周期和音频播放及监听实例详解
Apr 07 Javascript
使用JS实现图片轮播的实例(前后首尾相接)
Sep 21 Javascript
jQuery创建及操作xml格式数据示例
May 26 jQuery
vue-cli2.0转3.0之项目搭建的详细步骤
Dec 11 Javascript
Electron整合React使用搭建开发环境的步骤详解
Jun 07 Javascript
vue+iview使用树形控件的具体使用
Nov 02 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 stripos()函数及注意事项的分析
2013/06/08 PHP
php递归获取目录内文件(包含子目录)封装类分享
2013/12/25 PHP
百度工程师讲PHP函数的实现原理及性能分析(一)
2015/05/13 PHP
win7安装php框架Yii的方法
2016/01/25 PHP
ThinkPHP3.2.3实现分页的方法详解
2016/06/03 PHP
php版微信公众平台开发之验证步骤实例详解
2016/09/23 PHP
浅谈PHP的exec()函数无返回值排查方法(必看)
2017/03/31 PHP
基于Jquery 解决Ajax请求的页面 浏览器后退前进功能,页面刷新功能实效问题
2010/12/11 Javascript
js中页面的重新加载(当前页面/上级页面)及frame或iframe元素引用介绍
2013/01/24 Javascript
chrome下img加载对height()的影响示例探讨
2014/05/26 Javascript
js实现超简单的展开、折叠目录代码
2015/08/28 Javascript
基于jQuery插件实现点击小图显示大图效果
2016/05/11 Javascript
【经典源码收藏】基于jQuery的项目常见函数封装集合
2016/06/07 Javascript
js 判断各种数据类型的简单方法(推荐)
2016/08/29 Javascript
ES6入门教程之let和const命令详解
2017/05/17 Javascript
解决Jquery下拉框数据动态获取的问题
2018/01/25 jQuery
jquery引入外部CDN 加载失败则引入本地jq库
2018/05/23 jQuery
JS+H5 Canvas实现时钟效果
2018/07/20 Javascript
vue swipe自定义组件实现轮播效果
2019/07/03 Javascript
Python2.x中str与unicode相关问题的解决方法
2015/03/30 Python
python基础之包的导入和__init__.py的介绍
2018/01/08 Python
matplotlib 纵坐标轴显示数据值的实例
2018/05/25 Python
keras 获取某层输出 获取复用层的多次输出实例
2020/05/23 Python
python3排序的实例方法
2020/10/20 Python
python中的split、rsplit、splitlines用法说明
2020/10/23 Python
CSS3旋转——彩色扇子兼容firefox浏览器
2013/06/04 HTML / CSS
南威尔士家居商店:Leekes
2016/10/25 全球购物
大学生违纪检讨书300字
2014/10/25 职场文书
技术员岗位职责范本
2015/04/11 职场文书
《鸡兔同笼》教学反思
2016/02/19 职场文书
JavaScript实现简单计时器
2021/06/22 Javascript
MySQL中int (10) 和 int (11) 的区别
2022/01/22 MySQL
古见同学有交流障碍症 第二季宣传CM公开播出
2022/04/11 日漫
Python写情书? 10行代码展示如何把情书写在她的照片里
2022/04/21 Python
ant design charts 获取后端接口数据展示
2022/05/25 Javascript
JS精髓原型链继承及构造函数继承问题纠正
2022/06/16 Javascript