Как получить размер изображения (высота и ширина) с помощью JavaScript?

526

Существуют ли какие-либо jQuery или чистые JS API или методы для получения размеров изображения на странице?

Теги:
image
jquery-plugins

23 ответа

359
Лучший ответ

clientWidth и clientHeight - DOM свойства, отображающие текущий размер браузера внутренних размеров элемента DOM (исключая границу и границу). Поэтому в случае элемента IMG это получит фактические размеры видимого изображения.

var img = document.getElementById('imageid'); 
//or however you get a handle to the IMG
var width = img.clientWidth;
var height = img.clientHeight;
  • 171
    Это просто получает размеры элемента, а не изображения ...
  • 31
    @ Ники точно. Он дает размеры изображения в том виде, в котором он представлен в этом случае .
Показать ещё 7 комментариев
706

Вы можете программно получить изображение и проверить размеры с помощью Javascript...

var img = new Image();
img.onload = function() {
  alert(this.width + 'x' + this.height);
}
img.src = 'http://www.google.com/intl/en_ALL/images/logo.gif';

Это может быть полезно, если изображение не является частью разметки.

  • 7
    Я только что попробовал это в Firefox4, он выдаст 0x0.
  • 0
    Это работает событие в IE 9 jsfiddle.net/jeykeu/HZPkm/1 спасибо @JoshStodola
Показать ещё 10 комментариев
228

Также (в дополнение к ответам Rex и Ian) есть:

imageElement.naturalHeight

и

imageElement.naturalWidth

Они обеспечивают высоту и ширину самого файла изображения (а не только элемента изображения).

  • 3
    Хром тоже (на данный момент)
  • 5
    @Jourkey: они были в webkit (и так Safari, Chrome, Epiphany и большинство мобильных браузеров ...) в течение длительного времени
Показать ещё 7 комментариев
102

Если вы используете jQuery и запрашиваете размеры изображений, вам нужно подождать, пока они загрузятся, или вы получите только нули.

$(document).ready(function() {
    $("img").load(function() {
        alert($(this).height());
        alert($(this).width());
    });
});
  • 2
    Для справки: api.jquery.com/load-event
  • 0
    Всегда ли ширина и высота доступны в загрузчике?
Показать ещё 4 комментария
81

Я думаю, что обновление этих ответов полезно, потому что один из наиболее проголосовавших ответов предлагает использовать clientWidth и clientHeight, которые, я думаю, теперь устарели.

Я провел несколько экспериментов с HTML5, чтобы увидеть, какие значения действительно возвращаются.

Прежде всего, я использовал программу под названием Dash, чтобы получить обзор API изображений. В нем указано, что height и width - это высота/ширина изображения, а naturalHeight и naturalWidth - внутренняя высота/ширина изображения (и только HTML5).

Я использовал изображение красивой бабочки, из файла с высотой 300 и шириной 400. И этот Javascript:

var img = document.getElementById("img1");

console.log(img.height,           img.width);
console.log(img.naturalHeight,    img.naturalWidth);
console.log($("#img1").height(),  $("#img1").width());

Затем я использовал этот HTML-код с встроенным CSS для высоты и ширины.

<img style="height:120px;width:150px;" id="img1" src="img/Butterfly.jpg" />

Результаты:

/*Image Element*/ height == 300         width == 400
           naturalHeight == 300  naturalWidth == 400
/*Jquery*/      height() == 120       width() == 150

/*Actual Rendered size*/    120                  150

Затем я изменил HTML на следующее:

<img height="90" width="115" id="img1" src="img/Butterfly.jpg" />

то есть. используя атрибуты высоты и ширины, а не встроенные стили.

Результаты:

/*Image Element*/ height ==  90         width == 115
           naturalHeight == 300  naturalWidth == 400
/*Jquery*/      height() ==  90       width() == 115

/*Actual Rendered size*/     90                  115

Затем я изменил HTML на следующее:

<img height="90" width="115" style="height:120px;width:150px;" id="img1" src="img/Butterfly.jpg" />

то есть. используя оба атрибута и CSS, чтобы увидеть, какой из них имеет приоритет.

Результаты:

/*Image Element*/ height ==  90         width == 115
           naturalHeight == 300  naturalWidth == 400
/*Jquery*/      height() == 120       width() == 150

/*Actual Rendered size*/    120                  150
  • 0
    Почему вы думаете, что clientHeight устарел?
  • 0
    Ваш ответ мне очень помог, потому что я не устанавливаю высоту и ширину изображения, это естественно. Другие ответы всегда приводят к ширине, высоте. Спасибо.
62

Используя JQuery, вы выполните следующее:

var imgWidth = $("#imgIDWhatever").width();
  • 63
    А если изображение еще не загружено?
  • 11
    а если изображение находится в фоновом свойстве div? :)
Показать ещё 2 комментария
25

Все, что забыли, это то, что вы не можете проверить размер изображения до его загрузки. Когда автор проверяет все опубликованные методы, он будет работать, вероятно, только на localhost. Поскольку jQuery можно использовать здесь, помните, что перед загрузкой изображений запускается событие "ready". $('# xxx'). width() и .height() должны быть запущены в событии onload или позже.

  • 8
    Разместите некоторый обновленный код, вы можете получить голосование и даже получить желанный значок разворота!
  • 1
    @ Thinker, пожалуйста, предоставьте ваше решение, потому что ваш анализ кажется правильным.
Показать ещё 1 комментарий
18

Вы действительно можете сделать это только с помощью обратного вызова события загрузки, поскольку размер изображения неизвестен до тех пор, пока он не закончит загрузку. Что-то вроде кода ниже...

var imgTesting = new Image();

function CreateDelegate(contextObject, delegateMethod)
{
    return function()
    {
        return delegateMethod.apply(contextObject, arguments);
    }
}

function imgTesting_onload()
{
    alert(this.width + " by " + this.height);
}


imgTesting.onload = CreateDelegate(imgTesting, imgTesting_onload);
imgTesting.src = 'yourimage.jpg';
  • 1
    в jquery вы можете использовать $ .proxy для этого.
8

С jQuery библиотека -

Используйте .width() и .height().

Подробнее в jQuery width и jQuery heigth.

Пример кода -

$(document).ready(function(){
    $("button").click(function()
    {
        alert("Width of image: " + $("#img_exmpl").width());
        alert("Height of image: " + $("#img_exmpl").height());
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>

<img id="img_exmpl" src="http://images.all-free-download.com/images/graphicthumb/beauty_of_nature_9_210287.jpg">
<button>Display dimensions of img</button>
7

ОК, я думаю, что я улучшил исходный код, чтобы позволить загрузке изображения, прежде чем пытаться выяснить его свойства, иначе он отобразит "0 * 0", потому что следующий оператор вызывается перед файлом был загружен в браузер. Требуется jquery...

function getImgSize(imgSrc){
    var newImg = new Image();
    newImg.src = imgSrc;
    var height = newImg.height;
    var width = newImg.width;
    p = $(newImg).ready(function(){
        return {width: newImg.width, height: newImg.height};
    });
    alert (p[0]['width']+" "+p[0]['height']);
}
6

Прежде чем использовать реальный размер изображения, вы должны загрузить исходное изображение. Если вы используете фреймворк JQuery, вы можете получить реальный размер изображения простым способом.

$("ImageID").load(function(){
  console.log($(this).width() + "x" + $(this).height())
})
4

Этот ответ был именно тем, что я искал (в jQuery):

var imageNaturalWidth = $('image-selector').prop('naturalWidth');
var imageNaturalHeight = $('image-selector').prop('naturalHeight');
2

Просто вы можете протестировать это.

  <script>
  (function($) {
        $(document).ready(function() {
            console.log("ready....");
            var i = 0;
            var img;
            for(i=1; i<13; i++) {
                img = new Image();
                img.src = 'img/' + i + '.jpg';
                console.log("name : " + img.src);
                img.onload = function() {
                    if(this.height > this.width) {
                        console.log(this.src + " : portrait");
                    }
                    else if(this.width > this.height) {
                        console.log(this.src + " : landscape");
                    }
                    else {
                        console.log(this.src + " : square");
                    }
                }
            }
        });
    }(jQuery));
  </script>
2

Ответ JQuery:

$height = $('#image_id').height();
$width  = $('#image_id').width();
  • 1
    Это не будет работать, если атрибут width = "123" не установлен
1
var imgSrc, imgW, imgH;
function myFunction(image){
    var img = new Image();
    img.src = image;
    img.onload = function() {   
        return {
            src:image,
            width:this.width,
            height:this.height};
        }
    return img;
}
var x = myFunction('http://www.google.com/intl/en_ALL/images/logo.gif');
    //Waiting for the image loaded. Otherwise, system returned 0 as both width and height.
x.addEventListener('load',function(){
    imgSrc = x.src;
    imgW = x.width;
    imgH = x.height;
});
x.addEventListener('load',function(){
    console.log(imgW+'x'+imgH);//276x110
});
console.log(imgW);//undefined.
console.log(imgH);//undefined.
console.log(imgSrc);//undefined.

Это мой метод, надеюсь, это полезно.:)

1

Вы можете применить свойство обработчика onload, когда страница загружается в js или jquery следующим образом: -

$(document).ready(function(){
   var width = img.clientWidth;
   var height = img.clientHeight;

 });
1

Недавно у меня была такая же проблема с ошибкой в ​​слайдере flex. Первая высота изображения была уменьшена из-за задержки загрузки. Я попробовал следующий метод для решения этой проблемы, и он сработал.

// create image with a reference id. Id shall be used for removing it from the dom later.
var tempImg = $('<img id="testImage" />');
//If you want to get the height with respect to any specific width you set.
//I used window width here.
tempImg.css('width', window.innerWidth);  
tempImg[0].onload = function () {
    $(this).css('height', 'auto').css('display', 'none');
    var imgHeight = $(this).height();
    // Remove it if you don't want this image anymore.
    $('#testImage').remove();
}
//append to body
$('body').append(tempImg);
//Set an image url. I am using an image which I got from google.
tempImg[0].src ='http://aspo.org/wp-content/uploads/strips.jpg';

Это даст вам высоту относительно установленной ширины, а не оригинальной ширины или нуля.

1
var img = document.getElementById("img_id");
alert( img.height + " ;; " + img .width + " ;; " + img .naturalHeight + " ;; " + img .clientHeight + " ;; " + img.offsetHeight + " ;; " + img.scrollHeight + " ;; " + img.clientWidth + " ;; " + img.offsetWidth + " ;; " + img.scrollWidth )
//But all invalid in Baidu browser  360 browser ...
  • 0
    Пожалуйста, прокомментируйте свой код.
1

Ники Де Маейер спросил после фоновой картины; Я просто получаю его из css и заменяю "url()":

var div = $('#my-bg-div');
var url = div.css('background-image').replace(/^url\(\'?(.*)\'?\)$/, '$1');
var img = new Image();
img.src = url;
console.log('img:', img.width + 'x' + img.height); // zero, image not yet loaded
console.log('div:', div.width() + 'x' + div.height());
img.onload = function() {
  console.log('img:', img.width + 'x' + img.height, (img.width/div.width()));
}
  • 0
    Я никогда не понимал использование регулярных выражений для этого при использовании jQuery. Так как jQuery нормализует атрибут для вас, вы просто прекрасно s.substr(4,s.length-5) с использованием s.substr(4,s.length-5) , это как минимум легче для глаз;)
1

Вы также можете использовать:

var image=document.getElementById("imageID");
var width=image.offsetWidth;
var height=image.offsetHeight;
0

Прежде чем приобретать атрибуты элемента, страница документа должна быть загружена:

window.onload=function(){
    console.log(img.offsetWidth,img.offsetHeight);
}
0
function outmeInside() {
var output = document.getElementById('preview_product_image');

 if (this.height < 600 || this.width < 600) {
     output.src = "http://localhost/danieladenew/uploads/no-photo.jpg";
     alert("The image you have selected is low resloution image.Your image width=" + this.width + ",Heigh=" + this.height + ". Please select image greater or equal to 600x600,Thanks!");
 } else {
     output.src = URL.createObjectURL(event.target.files[0]);

 }
 return;

 }

 img.src = URL.createObjectURL(event.target.files[0]);
}

эта работа для предварительного просмотра и загрузки изображений. если вам нужно выбирать для каждого из изображений по одному. Затем скопируйте и зайдите во все функции предварительного просмотра и подтвердите свой выбор.

0

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

$('.right-sidebar').find('img').each(function(){
    $(this).removeAttr("width");
    $(this).removeAttr("height");
    $(this).imageResize();
});

Это один пример проекта TYPO3 Project от меня, где мне нужны реальные свойства изображения, чтобы масштабировать его с правильным соотношением.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню