2017-06-01 144 views
3

我有一个Angular应用程序,我需要Base64编码图像的尺寸。 我试图将其加载到一个Image,但它只是说,这是0x0从Base64编码图像获取尺寸

const image = new Image(); 
image.src = 'data:image/jpeg;base64,someBase64ImageString'; 

console.log(image.width + 'x' + image.height); 

我无法弄清楚如何得到这个信息。

回答

1

设置src和图像中的“加载”状态(因此具有尺寸)之间的步骤是异步 - 这似乎适用于数据URI以及外部资源(至少在Chrome中)。

要安全保证widthheight被填充,逻辑应该在回调运行 - 即

let im = new Image; 
im.src = 'data:image/png;base64,whatever'; 
im.onload =() => console.log(im.width); 

注意这只是一个问题,在第一时间的图像加载,你的代码工作原样用于连续调用 - 可以推测这与浏览器处理和缓存数据的方式有关。

+0

嗨,谢谢你的答案。据我记得,加载页面时,onload事件被激发,但由于它已经加载,当我注册时,我不明白什么时候该事件应该被解雇? – methgaard

+0

图像有他们自己的'load'事件。被“加载”的页面仅考虑标记 - 而不是嵌入资源的状态。点被加载或不加载,显然有一些处理是在图像尺寸被填充之前进行的。 – Emissary

+0

谢谢,解决了! – methgaard

1

确保你的src前面加上data:image/png;base64,

所以应该

img.src= 'data:image/png;base64,' + b64string;

+0

这是前置我没有想过在我的问题中显示。我会马上解决这个问题:)谢谢! – methgaard

+0

我会确保图像是一个有效的图像然后 - 您发布的代码作品https://i.imgur.com/hetNNxT.png – JonLuca

+0

不幸的是。感谢您的帮助 – methgaard