Определить оригинальный размер изображения кросс-браузера? - PullRequest
86 голосов
/ 22 декабря 2009

Существует ли надежный, независимый от структуры способ определения физических размеров <img src='xyz.jpg'>, измененного размера на стороне клиента?

Ответы [ 5 ]

124 голосов
/ 22 декабря 2009

У вас есть 2 варианта:

Вариант 1:

Удалите атрибуты width и height и прочитайте offsetWidth и offsetHeight

Вариант 2:

Создайте объект JavaScript Image, установите src и прочитайте width и height (вам даже не нужно добавлять его на страницу, чтобы сделать это).

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
}

Редактировать с помощью Pekka : Как было указано в комментариях, я изменил функцию для запуска по событию «загрузка» изображения. В противном случае с большими изображениями height и width ничего не вернут, поскольку изображение еще не загружено.

89 голосов
/ 20 декабря 2011

Изображения (по крайней мере в Firefox) имеют свойство naturalWidth / height, поэтому вы можете использовать img.naturalWidth, чтобы получить исходную ширину

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

Источник

3 голосов
/ 22 сентября 2016

Просто немного изменив второй вариант Габриэля, чтобы было удобнее пользоваться:

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%">

Пример звонка:

getImgSize($("#_temp_circlePic").attr("src"), function (imgSize) {
    // do what you want with the image's size.
    var ratio = imgSize.height / $("#_temp_circlePic").height();
});
3 голосов
/ 22 декабря 2009

Вы можете предварительно загрузить изображение в объект Image javascript, а затем проверить свойства ширины и высоты для этого объекта.

2 голосов
/ 06 февраля 2016
/* 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...