js将图片或者文件转成base64格式的两种方法

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

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

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

  2. 【webapck+vue项目】需要用 require('@/assets/xxx.png') 引入图片,不能直接写 【'@/assets/xxx.png'】这个字符串
  3. 【vite+vue项目】需要使用import xxx from 'xxx.png'引入图片
  4. 仅可以转换图片类型的数据
// 注意图片的,onload是异步的,如果要封装成工具函数,需要用promise包装一下
async function imgToBase64(url) {
	return new Promise((resolve, reject) => {
		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 resolve(base64)
		}
		image.onerror = (err) => {
			return reject(err);
		}
	})
}

// 引入项目中的图片
const imgUrl = require('xxx.png');
imgToBase64(imgUrl).then(res => {
    if(res) {
        console.log('生成的base64图片', res)
    }
}).catch(err => {
	console.log('这里是错误', err);
});

场景二,有一个公开的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);
     // 重点1
     xhr.responseType = 'blob';
     xhr.onload = function() {
         if (this.status == 200) {
              //得到一个blob对象
              let blob = this.response;
              // 重点2
              let 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

  • 23
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
JavaScript中,你可以使用不同的方法图片链接换为base64。其中一种方法是使用HTMLCanvasElement的toDataURL()方法。这个方法可以将Canvas元素中的内容换为base64编码的字符串。你可以将图片加载到一个Canvas元素中,然后使用toDataURL()方法来获取base64编码的图片数据。这个方法适用于将远程图片链接换为base64编码。 另一种方法是使用FileReader的readAsDataURL()方法。这个方法可以将File对象或Blob对象换为base64编码的字符串。你可以使用fetch API请求获取远程图片的Blob对象,然后使用readAsDataURL()方法来获取base64编码的图片数据。这个方法适用于将远程图片链接换为base64编码。 如果你要将本地图片换为base64编码,你可以使用canvas的基本操作和toDataURL()方法。首先,你需要创建一个Canvas元素,并将图片加载到这个Canvas元素中。然后,使用toDataURL()方法将Canvas中的内容换为base64编码的字符串。这个方法适用于将本地图片换为base64编码。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [js图片或者文件转成base64格式两种方法](https://blog.csdn.net/qq_17335549/article/details/128134996)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值