js将图片或者文件转成base64格式的两种方法
创始人
2024-03-12 05:16:10
0

场景一,项目assets资源里面的图片本地图片,重点如下

  1. 需要了解 canvas的基本操作,canvas.toDataURL 方法

    HTMLCanvasElement.toDataURL() 方法返回一个包含图片展示的 data URI 。可以使用 type 参数其类型,默认为 PNG 格式。图片的分辨率为 96dpi。

  2. 需要用 require('@/assets/xxx.png') 引入图片,不能直接写 【'@/assets/xxx.png'】这个字符串
  3. 仅可以转换图片类型的数据
function imgToBase64(url) {const image = new Image();image.src = url;image.onload = () => {const canvas = document.createElement('canvas');canvas.width = image.naturalWidth; // 使用 naturalWidth 为了保证图片的清晰度canvas.height = image.naturalHeight;canvas.style.width = `${canvas.width / window.devicePixelRatio}px`;canvas.style.height = `${canvas.height / window.devicePixelRatio}px`;const ctx = canvas.getContext('2d');if (!ctx) {return null;}ctx.drawImage(image, 0, 0);const base64 = canvas.toDataURL('image/png');return base64;};
},// 引入项目中的图片
const imgUrl = require('xxx.png');
const res = imgToBase64(imgUrl);
console.log('生成的base64图片', res)

场景二,有一个公开的url,比如https//xx.png 或者项目public目录下的图片,重点如下

  1. 使用 ajax + FileReader
  2. ajax 异步请求使用XMLHttpRequest、fetch、axios都可以 
  3. 需要将请求的返回格式 responseType 转成 Blob 格式
  4. 这种方法也适用于文件转成 base64
 getBase64(imgUrl) {let xhr = new XMLHttpRequest();xhr.open('get', '/xxx.jpg', true);// 重点1xhr.responseType = 'blob';xhr.onload = function() {if (this.status == 200) {//得到一个blob对象let blob = this.response;// 重点2let oFileReader = new FileReader();oFileReader.onloadend = function(e) {// 结果const base64 = e.target.result};oFileReader.readAsDataURL(blob);}};xhr.send();
},

 使用 fetch api请求,大同小异,重点都是 responseType 要设置为blob,再使用 FileReader 的 readAsDataURL 方法把  blob 转成 base64

function getBase64(imgUrl) {var xhr = new XMLHttpRequest();fetch(imgUrl, {responseType: 'blob'}).then(response => {return response.blob();}).then(blob => {let oFileReader = new FileReader();oFileReader.onloadend = function(e) {// base64结果const base64 = e.target.result};oFileReader.readAsDataURL(blob);});
},

重点提示

发现没有?方法一是用的 HTMLCanvasElement.toDataURL()  和 方法二是用的 FileReader.readAsDataURL() 都有一个【DataURL】,这就说明这个【dataURL】是和base64有关系的,所以,以后无论是文件,还是图片转成base64都需要先想到带有【dataURL】的方法。

Data URL,即前缀为 data: 协议的 URL,其允许内容创建者向文档中嵌入小文件。它们之前被称作“data URI”,直到这个名字被 WHATWG 弃用。

bae64的图片/文字就是一种Data URL

请看官方文档

Data URL - HTTP | MDNData URL,即前缀为 data: 协议的 URL,其允许内容创建者向文档中嵌入小文件。它们之前被称作“data URI”,直到这个名字被 WHATWG 弃用。https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/Data_URLs

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...