JS-base64コードから画像の幅と高さを取得する


回答:


147
var i = new Image(); 

i.onload = function(){
 alert( i.width+", "+i.height );
};

i.src = imageData; 

ただすごい、サイズをチェックするのに半分の時間がかかります、どうもありがとう!
爆弾2013

6
これが非同期プロセスであることは残念です。
Coen Damen、2015

1
@CoenDamenうん。同期処理も必要です。
1.21ギガワット2016

あなたは素晴らしいです
バルドリニウム

12
ここでの順序が非常に重要であることも付け加えておきます。これを逆に行うと(onloadの前にsrc)、イベントを見逃す可能性があります。参照:stackoverflow.com/a/2342181/4826740
maxshuty 2017

34

同期的に使用する場合は、次のようなpromiseにラップします。

function getImageDimensions(file) {
  return new Promise (function (resolved, rejected) {
    var i = new Image()
    i.onload = function(){
      resolved({w: i.width, h: i.height})
    };
    i.src = file
  })
}

次に、awaitを使用して、同期コーディングスタイルでデータを取得できます。

var dimensions = await getImageDimensions(file)

1
それでも非同期です。構文糖を使うだけです。
gustavopch

'naturalWidth'と 'naturalHeight`はより良い選択です。stackoverflow.com/questions/28167137/...
Crashalot

6

私はそれを使用.naturalWidth.naturalHeightていることを発見し、最良の結果を得ました。

const img = new Image();

img.src = 'https://via.placeholder.com/350x150';

img.onload = function() {
  const imgWidth = img.naturalWidth;
  const imgHeight = img.naturalHeight;

  console.log('imgWidth: ', imgWidth);
  console.log('imgHeight: ', imgHeight);
};

これは最新のブラウザでのみサポートされています。http://www.jacklmoore.com/notes/naturalwidth-and-naturalheight-in-ie/


2

<img>その画像で隠しファイルを作成し、jquery .width()およびを使用します。高さ()

$("body").append("<img id='hiddenImage' src='"+imageData+"' />");
var width = $('#hiddenImage').width();
var height = $('#hiddenImage').height();
$('#hiddenImage').remove();
alert("width:"+width+" height:"+height);

ここでテスト: FIDDLE

画像は最初は非表示に作成されていません。作成された後、幅と高さを取得して削除します。この場合、大きな画像では非常に短い可視性が生じる可能性があります。この場合、画像を別のコンテナにラップし、そのコンテナを画像自体ではなく非表示にする必要があります。


GPのanserに従ってdomに追加しない別のフィドル: ここ


var i = new Image(); i.src = imageData; setTimeout(function(){alert( "width:" + i.width + "height:" + i.height);}、100);
gp。

これはjsfiddleの性質上必要な修正にすぎません。代わりにonLoadをonDomReadyに変更して、最初の0の幅と高さの問題を修正できます。コードは、ドキュメントが既にロードされている作業のどこかでこの関数を呼び出すことを想定しています。
2013

ポイントは、幅と高さを取得するためにdomに何も追加する必要がないということでした。提案を反映するように回答を変更します。
2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.