2017-06-01 145 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