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 相关文章推荐
JQury slideToggle闪烁问题及解决办法
Jul 05 Javascript
jQuery实现可编辑的表格实例讲解(2)
Sep 17 Javascript
jQuery Ajax 实例代码 ($.ajax、$.post、$.get)
Apr 29 Javascript
微信小程序 地图(map)实例详解
Nov 16 Javascript
Vue2实现组件props双向绑定
Dec 02 Javascript
Extjs表单输入框异步校验的插件实现方法
Mar 20 Javascript
javascript过滤数组重复元素的实现方法
May 03 Javascript
微信小程序动态显示项目倒计时效果
Jun 13 Javascript
JavaScript代码执行的先后顺序问题
Oct 29 Javascript
微信小程序数字滚动插件使用详解
Feb 02 Javascript
vuex提交state&amp;&amp;实时监听state数据的改变方法
Sep 16 Javascript
jQuery 动画与停止动画效果实例详解
May 19 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设计模式 Strategy(策略模式)
2011/06/26 PHP
解析php 版获取重定向后的地址(代码)
2013/06/26 PHP
Yii控制器中操作视图js的方法
2016/07/04 PHP
PHP实现登陆并抓取微信列表中最新一组微信消息的方法
2017/07/10 PHP
PHP中number_format()函数的用法讲解
2019/04/08 PHP
关于div自适应高度/左右高度自适应一致的js代码
2013/03/22 Javascript
href下载文件根据id取url并下载
2014/05/28 Javascript
JavaScript获取某年某月的最后一天附截图
2014/06/23 Javascript
超链接的禁用属性Disabled使用示例
2014/07/31 Javascript
node.js中的events.emitter.removeAllListeners方法使用说明
2014/12/10 Javascript
chrome浏览器当表单自动填充时如何去除浏览器自动添加的默认样式
2015/10/09 Javascript
JS使用面向对象技术实现的tab选项卡效果示例
2017/02/28 Javascript
vue页面切换到滚动页面显示顶部的实例
2018/03/13 Javascript
微信小程序实现滑动切换自定义页码的方法分析
2018/12/29 Javascript
如何在微信小程序中存setStorage
2019/12/13 Javascript
jquery选择器和属性对象的操作实例分析
2020/01/10 jQuery
nodejs实现的http、https 请求封装操作示例
2020/02/06 NodeJs
使用Angular9和TypeScript开发RPG游戏的方法
2020/03/25 Javascript
Vue Object 的变化侦测实现代码
2020/04/15 Javascript
利用原生JS实现欢乐水果机小游戏
2020/04/23 Javascript
[07:39]第一届亚洲邀请赛回顾视频
2017/02/14 DOTA
python检查指定文件是否存在的方法
2015/07/06 Python
Python使用OpenCV进行标定
2018/05/08 Python
Python实现分段线性插值
2018/12/17 Python
在Python运行时动态查看进程内部信息的方法
2019/02/22 Python
python内存监控工具memory_profiler和guppy的用法详解
2019/07/29 Python
Django之PopUp的具体实现方法
2019/08/31 Python
5分钟实现Canvas鼠标跟随动画背景
2019/11/18 HTML / CSS
Hotels.com香港酒店网:你的自由行酒店订房专家
2018/01/22 全球购物
国际花店:Pickup Flowers
2020/04/10 全球购物
法律专业推荐信范文
2013/11/29 职场文书
上班玩游戏检讨书
2014/02/07 职场文书
个人评语大全
2014/05/04 职场文书
2015年初一班主任工作总结
2015/05/13 职场文书
奇妙的 CSS shapes(CSS图形)
2021/04/05 HTML / CSS
详细了解java监听器和过滤器
2021/07/09 Java/Android