JavaScript 将图片转为base64的方法。
求JavaScript 将图片转为base64的方法
在 JavaScript 中,可以使用 File API 和Canvas API 将图片转为base64格式的数据。以下是两种常用的方案:
使用 FileReader
读取图片数据,然后使用 Canvas
在内存中创建一张尺寸和图像文件一样的画布,并在其中绘制读取的图像文件,最后将画布中的图像数据转为 base64 编码即可。
示例代码如下:
function fileToBase64(file) {
return new Promise((resolve, reject) => {
if (!file) return reject(new Error("文件不存在!"));
if (!/image\/\w+/.test(file.type)) {
return reject(new Error("文件类型不是图片!"));
}
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function() {
const img = new Image();
img.src = this.result;
img.onload = function() {
const canvas = document.createElement('canvas');
canvas.width = img.width;
canvas.height = img.height;
const ctx = canvas.getContext('2d');
ctx.drawImage(img, 0, 0, img.width, img.height);
const dataURL = canvas.toDataURL(file.type);
resolve(dataURL);
}
};
reader.onerror = function() {
reject(new Error("文件读取出错!"));
};
});
}
调用方式:
const fileInput = document.getElementById('fileInput');
const file = fileInput.files[0];
if(file) {
fileToBase64(file).then(dataURL => {
console.log(dataURL); // 输出转换后的 base64 编码
}).catch(error => {
console.error(error);
});
}
使用 XMLHttpRequest 读取图片数据,然后将数据转为 Blob 对象,并使用 FileReader 读取 Blob 数据,在其 onload
回调中将数据转为 base64 编码即可。
示例代码如下:
function imageToBase64(imageUrl) {
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.open('GET', imageUrl, true);
xhr.responseType = 'blob';
xhr.onload = function() {
if (this.status === 200) {
const reader = new FileReader();
reader.readAsDataURL(this.response);
reader.onload = function() {
resolve(this.result);
};
reader.onerror = function() {
reject(new Error("读取数据出错!"));
};
} else {
reject(new Error("请求出错!"));
}
};
xhr.onerror = function() {
reject(new Error("请求出错!"));
};
xhr.send();
});
}
调用方式:
const imageUrl = 'https://example.com/image.png';
imageToBase64(imageUrl).then(dataURL => {
console.log(dataURL); // 输出转换后的 base64 编码
}).catch(error => {
console.error(error);
});
以上两种方案都可以将图片转为 base64 编码,具体使用哪种方案,可以根据实际的场景和需求进行选择。
https://blog.csdn.net/weixin_45062275/article/details/107045422
方式一:Blob和FileReader 对象
实现原理:
使用xhr请求图片,并设置返回的文件类型为Blob对象[xhr.responseType = “blob”]
使用FileReader 对象接收blob