Çapraz tarayıcının orijinal boyutunu belirle?


90

<img src='xyz.jpg'>Müşteri tarafında yeniden boyutlandırmanın fiziksel boyutlarını belirlemenin güvenilir, çerçeveden bağımsız bir yolu var mı?


img.onload = function () {console.log(img.height, img.width)}
neaumusic

Yanıtlar:


130

2 seçeneğiniz var:

Seçenek 1:

widthVe heightözniteliklerini kaldırın ve okuyun offsetWidthveoffsetHeight

Seçenek 2:

JavaScript oluşturma Imagenesnesi, set src, ve okumak widthve height(hatta bunu yapmak için sayfaya eklemek gerekmez).

function getImgSize(imgSrc) {
    var newImg = new Image();

    newImg.onload = function() {
      var height = newImg.height;
      var width = newImg.width;
      alert ('The image size is '+width+'*'+height);
    }

    newImg.src = imgSrc; // this must be done AFTER setting onload
}

Edit by Pekka : Yorumlarda kararlaştırıldığı gibi, işlevi görüntünün "yükleme" olayında çalışacak şekilde değiştirdim. Aksi takdirde, büyük görüntülerle heightve widthgörüntü henüz yüklenmediği için hiçbir şey döndürmez.


Bu, henüz yüklenmemiş görüntülerle çalışmaz. Bu yanıta rastlayan diğer insanlar için düzgün çalışacak şekilde ayarlamaya değer olabilir.
James

11
@Gabriel, bunu kullanıyorum ama newImg.onloadgenişliği / yüksekliği ayarladığımda görüntünün yüklendiğinden emin olmak için bir işlevle. Cevabınızı buna göre düzenlememde sorun var mı?
Pekka

2
Sadece bir yan not: Chrome / OSX, bu tekniği kullanarak yükseklik / genişlik olarak 0 aldığınız önbelleğe alınmış görüntülerde sorun yaşayabilir.
David Hellsing

2
boyunu ve genişliğini nasıl geri alabilirim ... ?? çünkü bu değişkenler yükün dışına çıkmıyor
jack

5
@GabrielMcAdams, if(newImg.complete || newImg.readyState === 4) newImg.onload();işlevinizin sonuna eklerseniz , Chrome / OSX'teki görüntüler önbellekten yüklendiğinde ateşlenmemesine neden olan onload sorununu çözecektir.
Prestaul

102

Resimler (en azından Firefox'ta) bir naturalWidth/ height özelliğine sahiptir, böylece img.naturalWidthorijinal genişliği elde etmek için kullanabilirsiniz

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

Kaynak


8
Chrome'da da çalışıyor
bcoughlan

4
Bu konu 2013'te hala geçerli. İşte IE7 / 8 için harika bir geçici çözüm içeren bir bağlantı: jacklmoore.com/notes/naturalwidth-and-naturalheight-in-ie
BurninLeo

4
2018'de kazanan cevap budur. Her yerde çalışır. (
MDN'deki

3

Görüntüyü bir javascript Görüntü nesnesine önceden yükleyebilir, ardından bu nesne üzerindeki genişlik ve yükseklik özelliklerini kontrol edebilirsiniz.


Tabii ki - onu belgeye koymam gerekmiyor. Bu şekilde yapacaksın, şerefe!
Pekka

3
/* Function to return the DOM object's in crossbrowser style */
function widthCrossBrowser(element) {
    /* element - DOM element */

    /* For FireFox & IE */
    if(     element.width != undefined && element.width != '' && element.width != 0){
        this.width  =   element.width;
    }
    /* For FireFox & IE */
    else if(element.clientWidth != undefined && element.clientWidth != '' && element.clientWidth != 0){
        this.width  =   element.clientWidth;
    }
    /* For Chrome * FireFox */
    else if(element.naturalWidth != undefined && element.naturalWidth != '' && element.naturalWidth != 0){
        this.width  =   element.naturalWidth;
    }
    /* For FireFox & IE */
    else if(element.offsetWidth != undefined && element.offsetWidth != '' && element.offsetWidth != 0){
        this.width  =   element.offsetWidth;
    }       
        /*
            console.info(' widthWidth width:',      element.width);
            console.info(' clntWidth clientWidth:', element.clientWidth);
            console.info(' natWidth naturalWidth:', element.naturalWidth);
            console.info(' offstWidth offsetWidth:',element.offsetWidth);       
            console.info(' parseInt(this.width):',parseInt(this.width));
        */
    return parseInt(this.width);

}   

var elementWidth    = widthCrossBrowser(element);

olan elementbir jQuery seçimi? Boy ne demek?
Istiaque Ahmed

2

Sadece Gabriel'in ikinci seçeneğini biraz değiştirerek, kullanımı daha kolay:

function getImgSize(imgSrc, callback) {
    var newImg = new Image();

    newImg.onload = function () {
        if (callback != undefined)
            callback({width: newImg.width, height: newImg.height})
    }

    newImg.src = imgSrc;
}

Html:

<img id="_temp_circlePic" src="http://localhost/myimage.png" 
style="width: 100%; height:100%">

Örnek arama:

getImgSize($("#_temp_circlePic").attr("src"), function (imgSize) {
    // do what you want with the image's size.
    var ratio = imgSize.height / $("#_temp_circlePic").height();
});
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.