JavaScript中数据URI的图像文件大小
我甚至不确定这是否可能,但是-我可以从数据URI获取图像文件大小吗 例如,假设有一个IMG元素,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
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图像,我检查的每个图像的字节都是正确的。另外,当图像变大时,不解析整个字符串也是一个很大的优点所有dataUri字符串的代码>
var src ="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP/// yH5BAEAAAAALAAAAAABAAEAAAIBRAA7";
var base64str = src.split('base64,')[1];
var decoded = atob(base64str);
console.log("FileSize: " + decoded.length);