2011-12-20 21 views
5

Görüntümün bu gibi bir orijinal, boyutsuz, görüntünün boyutunu nasıl elde edebilirim: <img src="picture.png" style="max-width:100px">?Ölçeklendirilmiş görüntünün orijinal boyutunu alma

Ben, özgün genişliği

var img = document.getElementsByTagName("img")[0]; 
img.onload=function(){ 
    console.log("Width",img.naturalWidth); 
    console.log("Height",img.naturalHeight); 
} 

Source

+0

@bugster Ölçeklendirilmiş bir resmin orijinal boyutunu bir web sitesine yerleştirmek için bunu nasıl uygularız? Web sitesine erişim yoksa, orijinal görüntüyü almak nasıl mümkün olabilir? Orijinal görüntü URL'sinin bir genel bağlantı olduğunu düşünün. –

cevap

4

Bir başka görüntü elemanı yaratmaktır yapmanın yolu almak için img.naturalWidth kullanabilirsiniz benim cevap buldu orijinalin src onun src ayarlamak ve sonra genişliğini okuyor. Tarayıcı tarayıcıyı önceden görüntülemiş olması gerektiği için bu ucuz olmalı. İşte

var i = document.getElementById('myimg'); 

var i2 = new Image(); 
i2.onload = function() { 
    alert(i2.width); 
}; 

i2.src = i.src; 

bir keman olduğunu: http://jsfiddle.net/baZ4Y/

+0

Ben de böyle yapıyorum, ancak yeni bir nesne oluşturup, görüntü verileriyle tamamlayın ve şeyleri ters çevirmemek için tarayıcının dahili önbelleğe alma mekanizmalarına güveniyorum. Daha iyi bir yol olmalıydı. – Andri

+0

Pekka, bunun daha önce cevaplandırıldığına işaret etti ve bu da bu sorudaki yaklaşımdı. Muhtemelen bu, tarayıcıların/JS'nin işlemek için iyi bir mekanizmaya sahip olmadığı küçük bir durumdur. –

0

DÜZENLEME: Bu yöntem bir sayfada oluşturulduktan sonra bir resmin bilgisayarlı boyutunu almak istiyorsanız kullanışlıdır, ancak onun büyüklüğü dönüşümü önce ölçeği. Görüntünün yalnızca orijinal boyutunu istiyorsanız, yukarıdaki yöntemleri kullanın.

Resmi büyütmek için resmin ölçeğini bir veri özelliğine yazmayı deneyin. Daha sonra, orijinal boyutu almak için yeni boyutları bu ölçek özniteliğine kolayca bölebilirsiniz. Böyle görünebilir:

// Set the scale data attribute of the image 
var scale = 2; 
img.dataset.scale = scale; 

... 

// Later, retrieve the scale and calculate the original size of the image 
var s = img.dataset.scale; 
var dimensions = [img.width(), img.height()]; 
var originalDimensions = dimensions.map(function(d) {return d/parseFloat(s)}); 

Alternatif olarak, sadece doğrudan jQuery ve regex kullanarak görüntünün ölçeğini alabilirsiniz.

var r = /matrix\(([\d.]+),/; 
try { 
    var currentTransform = $swiper.css('transform'); 
    var currentScale = currentTransform.match(r)[1]; 
} 
// Handle cases where the transform attribute is unset 
catch (TypeError) { 
    currentScale = 1; 
} 

Bu tamamen yeni bir görüntü oluştururken ve hızla yüklenmesi tarayıcının önbelleğe alma güvenmek yerine bana daha sezgisel mantıklı.

+0

Bir görüntü, 'etiketindeki parametrelerle ölçeklendiğinde işe yaramıyor. Resimlerin, orijinal boyutları doğrudan almanıza olanak veren bir ".naturalWidth" ve ".naturalHeight" özelliği vardır. – Bugster

+0

Anladım. Benim kullanım durumum için görüntünün orijinal boyutlarını almam gerekiyordu, ancak görüntünün ölçeklendirilmeden önce sayfada görüntülenen boyutu. Bir div sığacak şekilde farklı orijinal boyutlarda görüntüler boyutlandırdığım için, ".naturalWidth" ve ".naturalHeight" özellikleri benim için çalışmadı, ancak bu yöntem işe yaramadı. Bu cevabı birisinin buraya geldiğim aynı sorunla birlikte gelmesi durumunda bıraksam mı yoksa almamı mı tavsiye ederim? –

İlgili konular