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 相关文章推荐
ie 调试javascript的工具
Apr 29 Javascript
LazyForm jQuery plugin 定制您的CheckBox Radio和Select
Oct 24 Javascript
基于jQuery的固定表格头部的代码(IE6,7,8测试通过)
May 18 Javascript
js调用浏览器打印模块实现点击按钮触发自定义函数
Mar 21 Javascript
JQuery中使用.each()遍历元素学习笔记
Nov 08 Javascript
漂亮! js实现颜色渐变效果
Aug 12 Javascript
基于JS+Canves实现点击按钮水波纹效果
Sep 15 Javascript
JS 拦截全局ajax请求实例解析
Nov 29 Javascript
JavaScript定义全局对象的方法示例
Jan 12 Javascript
bootstrap table表格使用方法详解
Apr 26 Javascript
Three.js如何实现雾化效果示例代码
Sep 27 Javascript
vue代码分割的实现(codesplit)
Nov 13 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获取POST数据的几种方法汇总
2015/03/03 PHP
Session 失效的原因汇总及解决丢失办法
2015/09/30 PHP
php mongodb操作类 带几个简单的例子
2016/08/25 PHP
JavaScript Event学习第二章 Event浏览器兼容性
2010/02/07 Javascript
JS增加行复制行删除行的实现代码
2013/11/09 Javascript
浅谈Sizzle的“编译原理”
2015/04/14 Javascript
jQuery实现图片局部放大镜效果
2016/03/17 Javascript
jQuery实现简单滚动动画效果
2016/04/07 Javascript
JavaScript DOM节点操作方法总结
2016/08/23 Javascript
socket.io与pm2(cluster)集群搭配的解决方案
2017/06/02 Javascript
js单页hash路由原理与应用实战详解
2017/08/14 Javascript
基于vue-cli创建的项目的目录结构及说明介绍
2017/11/23 Javascript
JavaScript创建对象方法实例小结
2018/09/03 Javascript
Vue循环组件加validate多表单验证的实例
2018/09/18 Javascript
vue 解决form表单提交但不跳转页面的问题
2019/10/30 Javascript
JS获取当前时间戳方法解析
2020/08/29 Javascript
[12:29]《一刀刀一天》之DOTA全时刻19:蝙蝠骑士田伯光再度不举
2014/06/10 DOTA
python实现批量下载新浪博客的方法
2015/06/15 Python
Python中内置数据类型list,tuple,dict,set的区别和用法
2015/12/14 Python
浅谈Python生成器generator之next和send的运行流程(详解)
2017/05/08 Python
Python2.7读取PDF文件的方法示例
2017/07/13 Python
python模块之paramiko实例代码
2018/01/31 Python
python如何派生内置不可变类型并修改实例化行为
2018/03/21 Python
Python通过TensorFlow卷积神经网络实现猫狗识别
2019/03/14 Python
python 获取等间隔的数组实例
2019/07/04 Python
python将字母转化为数字实例方法
2019/10/04 Python
Python jieba库用法及实例解析
2019/11/04 Python
Python限制内存和CPU使用量的方法(Unix系统适用)
2020/08/04 Python
Python二元算术运算常用方法解析
2020/09/15 Python
Python实现图片指定位置加图片水印(附Pyinstaller打包exe)
2021/03/04 Python
澳大利亚潮流尖端的快时尚品牌:Cotton On
2016/09/26 全球购物
Bibloo罗马尼亚网站:女装、男装、童装及鞋子和配饰
2019/07/20 全球购物
Paradox London官方网站:英国新娘鞋婚礼鞋品牌
2019/08/29 全球购物
园林资料员岗位职责
2013/12/30 职场文书
关于运动会的广播稿
2015/08/19 职场文书
CSS使用伪类控制边框长度的方法
2022/01/18 HTML / CSS