2017-06-01 8 views
3

私はBase64でエンコードされた画像の寸法が必要な角度アプリケーションがあります。 私はImageにロードしようとしたが、それはちょうどそれが私がこの情報を取得する方法を見つけ出すことはできません0x0Base64でエンコードされた画像から寸法を取得する

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

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

であると言います。

答えて

1

する必要がありますあなたがdata:image/png;base64,

で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を設定し、画像は「ロードされた」状態にある間ステップ

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

+0

私は私の質問でそれを示すことを考えていなかった前に追加されました。私はすぐにそれを修正する:)ありがとう! – methgaard

+0

画像が有効な画像であることを確認します。投稿したコードは動作します。https://i.imgur.com/hetNNxT.png – JonLuca

+0

残念ながらそれはです。とにかく助けてくれてありがとう – methgaard

関連する問題