我正在使用 javascript 文件 API 使用readAsDataURL方法读取图像,发现我的图像总是比它们的原始图像大,在一种情况下甚至大 1MB。
这是我正在使用的代码
$(function() {
'use strict';
$('#source').on('change', function(evt) {
var reader = new FileReader();
var file = evt.target.files[0];
var reader = new FileReader();
reader.onloadend = function() {
$('#encoded').text('El tamaño codificado es ' + reader.result.length / 1024 + ' kb')
}
if (file) {
$('#original').text('El tamaño original es ' + file.size / 1024 + ' kb')
reader.readAsDataURL(file);
}
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="source" type="file">
<div id="original"></div>
<div id="encoded"></div>
我不知道我是否在这里遗漏了什么,或者这种行为是否有某种原因。有谁知道可能是什么原因?
Base64 是二进制内容的可打印字符表示。为了可打印,Base64 使用 64 个字符的字母表,每个字符 6 位。
出现“浪费”是因为 Base64 以字节存储/传输(与其他所有内容一样),因此对于您以 Base64 表示形式存储的每个字节,您需要 1 字节 + 下一个存储字节的 2 位..磁盘、网络、内存等。
一张图说了一千多个字:
也就是说,将原始文件的每个 3 字节块转换为 Base64 格式的 4 字节,这样至少大小会增加 4/3 的比例,即 133%。为此,您必须添加填充(文件大小并不总是 3 的倍数)和在传输文件中找到的回车符。
我刚刚尝试了以下尺寸的图像:
使用您的示例,我得到:
我们去圣英文维基百科https://en.wikipedia.org/wiki/Base64
在西班牙语中的圣维基百科https://es.wikipedia.org/wiki/Base64
无论是 137% 还是 140%,使用 Base64 时大小都会增加。干杯!
FileReader 将图像转换为 base64 文本字符串:
而您的变量是包含二进制
file
图像的类型对象。File
有关该对象的更多信息,
File
您可以阅读此文档