2011-07-04 13 views
25

イメージが完全に読み込まれたらイメージのサイズを取得する方法については読んだことがありますが、読み込みを開始したばかりのイメージのサイズは取得できます?イメージが完全にロードされる前にJavaScriptを使用してイメージのサイズを取得する

私はこれを検索することでそれほど多くのことを知ることはできませんでしたが、それは可能ではないと私に信じさせていますが、Firefox(私の場合はFirefox)が新しいタブそれはちょうどイメージをロードし始めた後のタイトルでは、実際には方法があると私はそれを見つけるために適切なキーワードを逃したことを願っています。

答えて

35

完全に読み込まれる前に画像の寸法を取得することができます。

はここ溶液(demo)です:

var img = document.createElement('img'); 

img.src = 'some-image.jpg'; 

var poll = setInterval(function() { 
    if (img.naturalWidth) { 
     clearInterval(poll); 
     console.log(img.naturalWidth, img.naturalHeight); 
    } 
}, 10); 

img.onload = function() { console.log('Fully loaded'); } 
+3

これは知っていることがとても涼しいです。私が追加する1つのことは、imgの高さや幅が画像タグまたはCSSに設定されている場合、画像の自然なサイズではなく、その値が返されるということです。ブラウザによっては、naturalWidth属性とnaturalSize属性をサポートするものがあります。あなたはあなたのフィドルのこのMODでそれを見ることができますhttp://jsfiddle.net/jfriend00/rQwD4/ – jfriend00

+0

驚き、ありがとう! – katspaugh

+0

@katspaugh あなたのコメントと提供されたデモをありがとう、それは私が探していたものです! @ jfriend00 私は自然なサイズの問題について知っていましたが、修正された例のおかげで、私の仕事は少なくなりました。 – user828591

1

1つの方法は、応答のHTTPヘッダーのみを要求するHEAD要求を使用することです。私はHEADレスポンスで知っている、ボディのサイズが含まれています。しかし、イメージのサイズに利用できるものがあるかどうかはわかりません。

+2

私は画像の寸法はHEAD応答であることを確認しないんだけど、とにかく、あなただけの '同じ-origin'要求でこれを行うことができ、またはあなたが、具体的セットアップサーバー'クロスを許可する場合 - 元気。 – vsync

0

は実際に、それは非常に簡単です、あなただけのイメージのonload関数の寸法を取得する必要があります。

var tempImage1 = new Image(); 
tempImage1.src = "path/to/image"; 
tempImage1.onload = function() { 
    console.log(tempImage1.width, tempImage1.height); 
} 
+2

これは質問に対する答えを提供しません。批評をしたり、著者の説明を求めるには、自分の投稿の下にコメントを残してください。自分の投稿にいつもコメントをつけることができます。そして、十分な[評判](http://stackoverflow.com/help/whats-reputation) [任意の投稿にコメントする]ことができます(http://stackoverflow.com/help/privileges/comment)。 –

+0

@EricBrownこれは確かに答えです。確かに意図された答えではなく、正解であっても、それにもかかわらず答えです。 @ArtjomB。 –

+0

質問を誤解していた。私はそれが '画像をロードせずに*'と思っていました。 –

10

次のコードは、使用可能になるとすぐに幅と高さを返します。テストのために、画像ソース内の変更するabc123をランダムな文字列に変更して、キャッシュを防止します。

JSFiddle Demoもあります。

<div id="info"></div> 
<img id="image" src="https://upload.wikimedia.org/wikipedia/commons/d/da/Island_Archway,_Great_Ocean_Rd,_Victoria,_Australia_-_Nov_08.jpg?abc123"> 

<script> 
getImageSize($('#image'), function(width, height) { 
    $('#info').text(width + ',' + height); 
}); 

function getImageSize(img, callback) { 
    var $img = $(img); 

    var wait = setInterval(function() { 
     var w = $img[0].naturalWidth, 
      h = $img[0].naturalHeight; 
     if (w && h) { 
      clearInterval(wait); 
      callback.apply(this, [w, h]); 
     } 
    }, 30); 
} 
</script> 
+2

これは受け入れられる回答でなければなりません – Toskan

+2

これは良いjQueryの代替ですが、OPによって要求されていない依存性を追加するので、 – rzb