方式一: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 = srcdocument.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>

js 图片转base64的方式(两种)相关推荐

  1. js 图片转base64的方式

    这篇文章主要介绍了js 图片转base64的方式,现在分享给大家,也给大家做个参考. 方式一:Blob和FileReader 对象 实现原理: 使用xhr请求图片,并设置返回的文件类型为Blob对象[ ...

  2. 原生态的ajax如何上传文件,原生ajax和iframe框架实现图片文件上传的两种方式

    大家应该可以举出几种常用的异步文件上传功能的实现方式,使用频率较多的有原生ajax和iframe框架,实现图片文件上传,下面就为大家分享图片文件上传的两种方式:原生ajax和iframe框架,供大家参 ...

  3. python怎么下载图片怎么保存到本地_详解Python下载图片并保存本地的两种方式

    一:使用Python中的urllib类中的urlretrieve()函数,直接从网上下载资源到本地,具体代码: import os,stat import urllib.request img_url ...

  4. php如何防止图片盗用/盗链的两种方法(转)

    图片防盗链有什么用? 防止其它网站盗用你的图片,浪费你宝贵的流量.本文章向大家介绍php防止图片盗用/盗链的两种方法 Apache图片重定向方法 设置images目录不充许http访问 Apache服 ...

  5. html+input改变图标,JS Input里添加小图标的两种方法

    我们在做网页的时候,经常需要在input里面添加小图标,那么这里就介绍比较常见的两种方法. 将小图标当做input的背景来插入,直接上代码吧: Box{ height: 50px; backgroun ...

  6. node.js 图片转base64编码

    node.js 图片转base64编码 说明:这里用的是调用接口上传一个图片转为base64编码,不想写接口也可以直接读取本地图:基于node.js,使用koa框架开发的接口. 1.接口代码: //k ...

  7. js获取classname值_利用js获取元素class值的两种方法

    我们有时为了达到某种效果,需要以元素的class值为条件做判断. 我们如何利用JavaScript获取元素class的值?我们先看下面代码: x=document.getElementsByTagNa ...

  8. JS实现千位分隔符的两种方法

    分享JS实现千位分隔符的两种方法 自己最好在 VScode 进行练习,看不如动手来得深刻 方法一:普通方法 <script>function numFormat(num) {var tmp ...

  9. html密码框怎么添加小图标,JS Input里添加小图标的两种方法

    我们在做网页的时候,经常需要在input里面添加小图标,那么这里就介绍比较常见的两种方法. 方法一 将小图标当做input的背景来插入,直接上代码吧: *{ margin: 0; padding: 0 ...

最新文章

  1. cannot import name 'etree' from 'lxml'
  2. vim中设置python代码缩进为4个空格
  3. 中小学计算机教室设备维修记录,多媒体电教室的管理与设备的维护
  4. 【转载】Windwos CE 跨进程内存注入
  5. 边缘计算精华问答 | 5G是否会“逼退”4G?
  6. 打印异常堆栈_关于日志打印行号的性能案例
  7. 解析Java对象的equals()和hashCode()的使用
  8. 关于事业发展,雷林鹏教你如何找到方向?
  9. Windows网络编程笔记5 -- 其他套接字
  10. android吸顶效果,RecyclerVIew实现悬浮吸顶效果
  11. python 源代码 macd双底 高 低_MACD双底,三底背离公式指标
  12. 远程服务器连接计算机和用户名填写,windos系统服务器:添加远程连接用户名方法...
  13. 水溶性花青素连接剂1617497-19-4,diSulfo-Cyanine5 alkyne,二磺酸花青素Cy5炔基
  14. 知识普及:KB=Kb?
  15. 【运营】运营网课之活动运营
  16. 宝贝流量高转化率低怎么办,如何提高宝贝转化率
  17. Java基于局域网(LAN)的聊天室软件-内附源码
  18. MFC+Halcon 真正实现图像缩放、平移
  19. EF Core 迁移过程遇到EF Core tools version版本不相符的解决方案
  20. 南邮 OJ 1668 撼地神牛

热门文章

  1. select简单2级联动
  2. jQuery 点击按钮刷新页面
  3. android 手机作为手写输入板
  4. linux和aida64,AIDA64 6.10版上线:支持中国兆芯
  5. 旗杆的安装方法和流程
  6. 管理综合类(二)稻盛和夫《阿米巴经营模式》、《干法》、《活法》等等
  7. XDS100V3-DIY
  8. 计算机查看硬件win10,win10查看硬件配置_win10查看硬件详细配置
  9. MFC ActiveX 打包 CAB
  10. 新win7系统死机,打开驱动精灵就卡住,解决方案 安装戴尔DELL Optilex 7040 USB驱动时提示无法定位程序输入点 kernel32.dll,解决方案