[英]Image file size from data URI in JavaScript
我不确定这是否可能,但是 - 我可以从数据 URI 中获取图像文件大小吗?
例如,假设有一个src
所在的 IMG 元素:
src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD...
基于src
,我可以使用纯 JavaScript 获取图像文件大小吗? (没有服务器请求)
如果您想要文件大小,只需解码您的 base64 字符串并检查长度。
var src ="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP/// yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"; var base64str = src.substr(22); var decoded = atob(base64str); console.log("FileSize: " + decoded.length);
如果您接受(非常好的)估计,则文件大小是 base64 字符串大小的 75%。 真实大小不大于此估计值,最多小两个字节。
如果您想写一行并完成它,请使用atob()
并检查长度,就像在其他答案中一样。
如果您想要具有最高性能的准确答案(在巨大文件或数百万个文件或两者的情况下),请使用估计值但考虑填充以获得确切大小:
let base64Length = src.length - (src.indexOf(',') + 1);
let padding = (src.charAt(src.length - 2) === '=') ? 2 : ((src.charAt(src.length - 1) === '=') ? 1 : 0);
let fileSize = base64Length * 0.75 - padding;
这避免了解析整个字符串,并且完全是矫枉过正,除非您正在寻找微优化或内存不足。
您最好的选择是计算 base64 字符串本身的长度。
您必须使用atob()
将 base64 字符串转换为普通字符串,然后检查它的长度,它将返回一个您可以说接近图像实际大小的值。 此外,您不需要数据 URI 中的data:image/jpeg;base64,
部分来检查大小。
这是基于Daniel Trans 代码的所有类型 base64 字符串的通用解决方案。
var src ="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP/// yH5BAEAAAAALAAAAAABAAEAAAIBRAA7";
var base64str = src.split('base64,')[1];
var decoded = atob(base64str);
console.log("FileSize: " + decoded.length);
其他解决方案使用了现在已被弃用的 atob。 这是一个使用 Buffer 代替的最新示例。
const src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD...";
const base64str = src.split('base64,')[1]; //remove the image type metadata.
const imageFile = Buffer.from(base64str, 'base64'); //encode image into bytes
console.log('FileSize: ' + imageFile.length);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.