JS 图片转base64

该博客主要围绕JS实现图片转base64展开,在信息技术领域,这一操作常用于前端开发中数据的处理与传输,能方便地将图片数据以文本形式传递,避免额外的资源请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

getBase64(url) {
				return new Promise((resolve, reject) => {
					// 通过构造函数来创建的 img 实例,在赋予 src 值后就会立刻下载图片,相比 createElement() 创建 <img> 省去了 append(),也就避免了文档冗余和污染
					let Img = new Image();
					Img.setAttribute('crossOrigin', 'anonymous');
					Img.src = url;
					Img.onload = () => { // 要先确保图片完整获取到,这是个异步事件
						console.log(Img.height);
						let dataURL = '';
						let canvas = document.createElement('canvas'); // 创建canvas元素
						let width = Img.width; // 确保canvas的尺寸和图片一样
						let height = Img.height;
						canvas.width = width;
						canvas.height = height;
						canvas.getContext('2d').drawImage(Img, 0, 0, width, height); // 将图片绘制到canvas中
						dataURL = canvas.toDataURL('image/png') // 转换图片为dataURL
						resolve(dataURL);
					};
				});
			},
在 JavaScript 中,可以通过 `canvas` 元素将图片换为 Base64 编码的字符串。这种方法利用了浏览器提供的图像处理能力,能够将图片绘制到一个不可见的 `canvas` 上,通过 `toDataURL()` 方法获取其 Base64 表示形式。 以下是一个完整的实现方式: ### 图片 URL 换为 Base64 编码 ```javascript function getBase64FromImageUrl(url) { return new Promise((resolve, reject) => { const img = new Image(); img.crossOrigin = 'Anonymous'; // 处理跨域图片 img.onload = function () { const canvas = document.createElement('canvas'); const ctx = canvas.getContext('2d'); canvas.width = img.width; canvas.height = img.height; ctx.drawImage(img, 0, 0); const dataURL = canvas.toDataURL('image/png'); // 可指定格式如 'image/jpeg' resolve(dataURL); }; img.onerror = function (error) { reject(new Error('Image load failed: ' + error)); }; img.src = url; }); } // 使用示例 getBase64FromImageUrl('https://example.com/image.png') .then(base64 => { console.log(base64); // 输出 Base64 字符串 }) .catch(err => { console.error(err); }); ``` ### 文件对象(如用户上传) Base64 编码 如果需要从本地文件系统中选择图片将其换为 Base64,可以使用 `<input type="file">` 获取文件对象,结合 `FileReader` 进行读取: ```html <input type="file" id="fileInput" /> <img id="preview" /> <script> document.getElementById('fileInput').addEventListener('change', function (e) { const file = e.target.files[0]; const reader = new FileReader(); reader.onload = function (event) { const imgBase64String = event.target.result; console.log(imgBase64String); // 输出 Base64 字符串 // 可选:预览图片 const preview = document.getElementById('preview'); preview.src = imgBase64String; }; reader.readAsDataURL(file); }); </script> ``` ### 注意事项 - **异步操作**:由于图片加载是异步过程,因此必须通过回调或 `Promise` 来处理结果。 - **跨域问题**:如果图片来自不同域,需设置 `img.crossOrigin = "Anonymous"` 以避免跨域限制。 - **数据格式**:`toDataURL()` 默认输出 PNG 格式,但也可以指定其他格式如 JPEG。 以上方法适用于大多数现代浏览器环境,广泛用于前端图像处理场景[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值