2011-07-04 22 views
25

Görüntü tamamen yüklendiğinde görüntü boyutlarını elde etmenin çeşitli yollarını okudum, ancak yüklendikten sonra herhangi bir resmin boyutlarını almak mümkün olabilir mi? ?Görüntü tamamen yüklenmeden önce Javascript ile görüntü boyutlarına getir

Aramayla bu konuda fazla bir şey bulamadım (ki bu da bana imkansız olduğunu gösteriyor), ancak bir tarayıcı (Firefox'umda) yeni bir sekmede açtığım herhangi bir resmin boyutlarını gösterir. Sadece resim yüklemeye başladıktan sonra başlığında bana gerçekten bir yol olduğunu umuyorum ve sadece onu bulmak için doğru anahtar kelimeleri kaçırdım.

cevap

35

Tam olarak yüklenmeden önce görüntü boyutlarının alınabileceği konusunda haklısınız.

İşte çözeltisi (demo) var:

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

Bunu bilmek çok güzel. Ekleyeceğim tek şey, img'nin resim etiketinde veya CSS'de bir yükseklik veya genişliğe sahip olması durumunda, yönteminiz görüntünün doğal boyutunu değil, yalnızca bu değeri döndürür. Bazı tarayıcılar naturalWidth ve naturalSize özniteliklerini destekler. Bu kemanın bu modunu burada görebilirsiniz http://jsfiddle.net/jfriend00/rQwD4/ – jfriend00

+0

Şaşırtıcı, teşekkürler! – katspaugh

+0

@katspaugh Yorumunuz ve sağlanan demo için teşekkürler, aradığım şey bu! @ jfriend00 Doğal boyut problemini biliyordum, fakat değiştirilen örnek için teşekkürler, benim için daha az çalışma anlamına geliyor. – user828591

1

Tek yol, yalnızca yanıtın HTTP Üstbilgisini soran HEAD isteğini kullanmaktır. HEAD cevaplarında biliyorum, bedenin büyüklüğü dahildir. Ama resimlerin boyutu için uygun bir şey olup olmadığını bilmiyorum.

+2

Bir resmin boyutları BAŞ yanıtta olduğundan emin değilim ve zaten, sadece aynı origin' istek 'bu yapabileceğini, ya da özellikle kurulum, sunucu ise' haçı izin vermek -origin'. – vsync

0

Aslında çok daha kolay, sadece resmin Onload fonksiyonundaki boyutlara getirmek zorundayız.

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

Bu, sorunun cevabını sağlamaz. Bir yazarın eleştirisini veya açıklamasını istemek için, gönderilerinizin altında bir yorum bırakın. Her zaman kendi gönderilerinize yorum yazabilirsiniz ve yeterli sayıda [ününüzü] aldıktan sonra (http://stackoverflow.com/help/whats-reputation) [herhangi bir yayına yorum yapabilir] (http://stackoverflow.com/help/privileges/comment). –

+0

@EricBrown Bu, yanıttır. Muhtemelen amaçlanan cevap ya da doğru cevap değil, ama yine de bir cevap. –

+0

@ArtjomB. Soruyu yanlış anlamış olsaydı; Ben 'görüntüyü yüklemeden' * olduğunu ve * 'tamamen * resim yüklemeden' olmadığını düşündüm. –

10

Aşağıdaki kod, kullanılabilir olduğu anda genişlik/yükseklik değerini döndürür. Test için, önbelleğe almayı önlemek için görüntü kaynağında abc123 değişkenini herhangi bir rastgele dizeye değiştirin. Ayrıca, JSFiddle Demo da bulunmaktadır.

<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

bu kabul edilen yanıt olmalıdır – Toskan

+2

Bu güzel bir jQuery alternatifi, ancak OP tarafından gerekli olmayan bağımlılığı eklediğinden kabul edilen yanıt olmamalıdır. – rzb

İlgili konular