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 相关文章推荐
可以把编码转换成 gb2312编码lib.UTF8toGB2312.js
Aug 21 Javascript
jQuery 工具函数学习资料
Apr 29 Javascript
javascript设置连续两次点击按钮时间间隔的方法
Oct 28 Javascript
浅析Node.js中使用依赖注入的相关问题及解决方法
Jun 24 Javascript
JS中判断字符串中出现次数最多的字符及出现的次数的简单实例
Jun 03 Javascript
巧方法 JavaScript获取超链接的绝对URL地址
Jun 14 Javascript
浅析bootstrap原理及优缺点
Mar 19 Javascript
JS实现基于Sketch.js模拟成群游动的蝌蚪运动动画效果【附demo源码下载】
Aug 18 Javascript
React实践之Tree组件的使用方法
Sep 30 Javascript
微信小程序js文件改变参数并在视图上及时更新【推荐】
Jun 11 Javascript
微信小程序日历弹窗选择器代码实例
May 09 Javascript
JavaScript原型链中函数和对象的理解
Jun 16 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中使用strpos函数实现屏蔽敏感关键字功能
2014/08/21 PHP
跟我学Laravel之请求与输入
2014/10/15 PHP
php中实现记住密码下次自动登录的例子
2014/11/06 PHP
Yii2实现多域名跨域同步登录退出
2017/02/04 PHP
javascript 面向对象的JavaScript类
2010/05/04 Javascript
使用JavaScript判断图片是否加载完成的三种实现方式
2014/05/04 Javascript
基于javascript、ajax、memcache和PHP实现的简易在线聊天室
2015/02/03 Javascript
js正则匹配出所有图片及图片地址src的方法
2015/06/08 Javascript
jQuery实现的数值范围range2dslider选取插件特效多款代码分享
2015/08/27 Javascript
详解如何使用webpack在vue项目中写jsx语法
2017/11/08 Javascript
基于 Vue.js 之 iView UI 框架非工程化实践记录(推荐)
2017/11/21 Javascript
vue动态删除从数据库倒入列表的某一条方法
2018/09/29 Javascript
vue 配置多页面应用的示例代码
2018/10/22 Javascript
vue+elementUI实现表格关键字筛选高亮
2020/10/26 Javascript
详解Node.js异步处理的各种写法
2019/06/09 Javascript
Vuex modules模式下mapState/mapMutations的操作实例
2019/10/17 Javascript
vue quill editor 使用富文本添加上传音频功能
2020/01/14 Javascript
Vue Render函数创建DOM节点代码实例
2020/07/08 Javascript
使用Python的Zato发送AMQP消息的教程
2015/04/16 Python
python异步存储数据详解
2019/03/19 Python
Python实现的栈、队列、文件目录遍历操作示例
2019/05/06 Python
解决安装pyqt5之后无法打开spyder的问题
2019/12/13 Python
TensorFlow tensor的拼接实例
2020/01/19 Python
ubuntu 安装pyqt5和卸载pyQt5的方法
2020/03/24 Python
Python中Selenium库使用教程详解
2020/07/23 Python
用python实现一个简单的验证码
2020/12/09 Python
CSS3常用的几种颜色渐变模式总结
2016/11/18 HTML / CSS
德国净水壶和滤芯品牌:波尔德PearlCo(家用净水器)
2020/04/29 全球购物
护理专业个人求职简历的自我评价
2013/10/13 职场文书
太太口服液广告词
2014/03/20 职场文书
工作业绩不及格检讨书
2014/10/28 职场文书
司法局2014法制宣传日活动总结
2014/11/01 职场文书
2014年服务行业工作总结
2014/11/18 职场文书
离婚案件被告代理词
2015/05/23 职场文书
《弟子规》读后感:知廉耻、明是非、懂荣辱、辨善恶
2019/12/03 职场文书
浅谈音视频 pts dts基本概念及理解
2022/08/05 数码科技