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 相关文章推荐
AlertBox 弹出层信息提示框效果实现步骤
Oct 11 Javascript
基于jQuery的history历史记录插件
Dec 11 Javascript
JS 进度条效果实现代码整理
May 21 Javascript
js与运算符和或运算符的妙用
Feb 14 Javascript
关闭浏览器窗口弹出提示框并且可以控制其失效
Apr 15 Javascript
JavaScript时间转换处理函数
Apr 14 Javascript
javascript实现table选中的行以指定颜色高亮显示的方法
May 13 Javascript
js表单中选择框值的获取及表单的序列化
Dec 17 Javascript
AngularJS 自定义指令详解及示例代码
Aug 17 Javascript
js实现上传文件添加和删除文件选择框
Oct 24 Javascript
vue移动端实现红包雨效果
Jun 23 Javascript
jQuery实现倒计时功能完整示例
Jun 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 冒泡排序 交换排序法
2011/05/10 PHP
详解php命令注入攻击
2019/04/06 PHP
javascript编码的几个方法详细介绍
2013/01/06 Javascript
火狐textarea输入法的bug的触发及解决
2013/07/24 Javascript
javaScript实现浮点数转十六进制字符
2013/10/29 Javascript
ie9 提示'console' 未定义问题的解决方法
2014/03/20 Javascript
技术男用来对妹子表白的百度首页
2014/07/23 Javascript
JavaScript字符串常用类使用方法汇总
2015/04/14 Javascript
jquery实现Li滚动时滚动条自动添加样式的方法
2015/08/10 Javascript
jquery实现的Banner广告收缩效果代码
2015/09/02 Javascript
BootStrap智能表单实战系列(三)分块表单配置详解
2016/06/13 Javascript
easyui datebox 时间限制,datebox开始时间限制结束时间,datebox截止日期比起始日期大的实现代码
2017/01/12 Javascript
js放大镜放大购物图片效果
2017/01/18 Javascript
JavaScript创建、读取和删除cookie
2019/09/03 Javascript
微信小程序如何通过用户授权获取手机号(getPhoneNumber)
2020/01/21 Javascript
vue前端和Django后端如何查询一定时间段内的数据
2021/02/28 Vue.js
深入解析Python编程中JSON模块的使用
2015/10/15 Python
django 删除数据库表后重新同步的方法
2018/05/27 Python
使用pytorch进行图像的顺序读取方法
2018/07/27 Python
对python 操作solr索引数据的实例详解
2018/12/07 Python
python之验证码生成(gvcode与captcha)
2019/01/02 Python
Django 配置多站点多域名的实现步骤
2019/05/17 Python
Python Tkinter模块 GUI 可视化实例
2019/11/20 Python
查看端口并杀进程python脚本代码
2019/12/17 Python
Pytorch实现各种2d卷积示例
2019/12/30 Python
Python控制台实现交互式环境执行
2020/06/09 Python
如何快速理解python的垃圾回收机制
2020/09/01 Python
CSS改变网页中鼠标选中文字背景颜色例子
2014/04/23 HTML / CSS
UML设计模式笔试题
2014/06/07 面试题
幼师求职自荐信范文
2014/01/26 职场文书
物流管理专业毕业生求职信
2014/03/23 职场文书
法制宣传月活动方案
2014/05/11 职场文书
培根随笔读书笔记
2015/07/01 职场文书
2015年教师节主持词
2015/07/03 职场文书
Win11跳过联网界面创建本地管理账户的3种方法
2022/04/20 数码科技
Windows Server 2008 修改远程登录端口以及配置防火墙
2022/04/28 Servers