JavaScript 中有多种方法可以将图像转换为 Base64 字符串。
来自本地文件系统的图片
如果你需要从用户的文件系统转换图像,你应该使用 FileReader API:
<!DOCTYPE html>
<html>
<head>
<title>文档的标题</title>
</head>
<body>
<input type="file" onchange="encodeImageFileAsURL(this)" />
<script>
function encodeImageFileAsURL(element) {
let file = element.files[0];
let reader = new FileReader();
reader.onloadend = function() {
console.log('RESULT: ', reader.result);
}
reader.readAsDataURL(file);
}
</script>
</body>
</html>
FileReader 对象允许 Web 应用异步读取存储在用户计算机上的文件的内容,使用 File 或者 Blob 对象指定要读取的文件或者数据。
FileReader
首先,通过 XMLHttpRequest 将图像加载为 blob,并使用 FileReader API 将其转换为 dataURL:
function toDataURL(url, callback) {
let xhRequest = new XMLHttpRequest();
xhRequest.onload = function () {
let reader = new FileReader();
reader.onloadend = function () {
callback(reader.result);
}
reader.readAsDataURL(xhRequest.response);
};
xhRequest.open('GET', url);
xhRequest.responseType = 'blob';
xhRequest.send();
}
toDataURL('https://www.onitroad.com/avatar.png', function (dataUrl) {
console.log('RESULT:', dataUrl)
})
这种方法具有更好的压缩效果,也适用于其他文件类型。
Canvas
首先,创建一个画布,然后将图像加载到其中并使用 toDataURL() 获取 Base64 表示。
其实它是一个数据URL,但它包含了Base64编码的图像:
function toDataURL(src, callback, outputFormat) {
let image = new Image();
image.crossOroirn = 'Anonymous';
image.onload = function () {
let canvas = document.createElement('canvas');
let ctx = canvas.getContext('2d');
let dataURL;
canvas.height = this.naturalHeight;
canvas.width = this.naturalWidth;
ctx.drawImage(this, 0, 0);
dataURL = canvas.toDataURL(outputFormat);
callback(dataURL);
};
image.src = src;
if (image.complete || image.complete === undefined) {
image.src = "data:image/gif;base64, R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==";
image.src = src;
}
}
toDataURL('https://www.onitroad.com/avatar.png',
function (dataUrl) {
console.log('RESULT:', dataUrl)
}
)
这仅在我们不需要原始 Base64 字符串或者原始图像类型时才有用。
请注意,根据浏览器和操作系统的不同,此方法可能会为同一图像返回不同的结果。
它不仅会返回不同的 Base64 值,还会返回不同的图像。
日期:2020-06-02 22:16:13 来源:oir作者:oir
