JavaScript中数据URI的图像文件大小

JavaScript中数据URI的图像文件大小,javascript,data-uri,Javascript,Data Uri,我甚至不确定这是否可能,但是-我可以从数据URI获取图像文件大小吗 例如,假设有一个IMG元素,src在其中: src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD... 基于src,我可以使用纯JavaScript获取图像文件大小吗?(无需服务器请求)如果需要文件大小,只需解码base64字符串并检查长度即可 var src=“data:image/gif;base64,r0lgodlhaqabaaaaaap///yh5baeaaa

我甚至不确定这是否可能,但是-我可以从数据URI获取图像文件大小吗

例如,假设有一个IMG元素,
src
在其中:

src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD...

基于
src
,我可以使用纯JavaScript获取图像文件大小吗?(无需服务器请求)

如果需要文件大小,只需解码base64字符串并检查长度即可

var src=“data:image/gif;base64,r0lgodlhaqabaaaaaap///yh5baeaaaaaaaaaaaaaaaaaaaaaaaaaa7”;
var base64str=src.substr(22);
var解码=atob(base64str);

log(“文件大小:+decoded.length”)最好的选择是计算base64字符串本身的长度

您必须使用
atob()
将base64字符串转换为普通字符串,然后检查其长度,它将返回一个值,您可以说该值接近图像的实际大小。您也不需要
数据:image/jpeg;base64,
part从数据URI检查大小

如果您对(非常好的)估计没有意见,那么文件大小是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字符串的通用解决方案


我非常确定OP是指文件大小,而不是图像的维度?这个数字表示什么?数据:image/gif;base64,我们需要排除22characters@AsheekaKP它不是图像内容的一部分。只是元数据注意到这对我来说在jpeg上不起作用<代码>错误错误:未捕获(承诺中):InvalidCharacterError:未能在“窗口”上执行“atob”:要解码的字符串编码不正确。错误:无法在“窗口”上执行“atob”:要解码的字符串编码不正确。
此“估计”完全适合我的用例。我已经测试了在浏览器中创建的高达8MB的动画PNG图像,我检查的每个图像的字节都是正确的。另外,当图像变大时,不解析整个字符串也是一个很大的优点
var src ="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP/// yH5BAEAAAAALAAAAAABAAEAAAIBRAA7";

var base64str = src.split('base64,')[1];
var decoded = atob(base64str);

console.log("FileSize: " + decoded.length);