Comment obtenir la taille de l'image (hauteur et largeur) en utilisant JavaScript?

y a-t-il des APIs ou des méthodes jQuery ou pure JS pour obtenir les dimensions d'une image sur la page?

525
demandé sur Karol Selak 2009-03-08 09:41:13

23 réponses

clientWidth et clientHeight sont des propriétés DOM qui montrent la taille du navigateur de l'intérieur les dimensions d'un élément du DOM (à l'exclusion de la marge et de la frontière). Donc, dans le cas d'un élément IMG, cela va obtenir les dimensions réelles de l'image visible.

var img = document.getElementById('imageid'); 
//or however you get a handle to the IMG
var width = img.clientWidth;
var height = img.clientHeight;
393
répondu Rex M 2009-08-21 07:22:53

vous pouvez programmatiquement obtenir l'image et vérifier les dimensions en utilisant 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';

cela peut être utile si l'image ne fait pas partie du balisage.

693
répondu Josh Stodola 2018-01-18 12:13:38

aussi (en plus des réponses de Rex et Ian) il y a:

imageElement.naturalHeight

et

imageElement.naturalWidth

ceux-ci fournissent la hauteur et la largeur du fichier image lui-même (plutôt que seulement l'élément image).

259
répondu olliej 2017-08-08 23:12:05

si vous utilisez jQuery et que vous demandez des tailles d'image, vous devez attendre qu'elles soient chargées ou vous n'obtiendrez que des zéros.

$(document).ready(function() {
    $("img").load(function() {
        alert($(this).height());
        alert($(this).width());
    });
});
106
répondu mrtsherman 2011-03-01 21:38:20

je pense qu'une mise à jour de ces réponses est utile parce que l'une des réponses les mieux votées suggère d'utiliser clientWidth et clientHeight, qui je pense est maintenant obsolète.

j'ai fait quelques expériences avec HTML5, pour voir quelles valeurs sont réellement retournées.

tout d'abord, j'ai utilisé un programme appelé Dash pour obtenir un aperçu de l'API d'image. Il indique que height et width sont la hauteur/largeur rendue de l'image et que naturalHeight et naturalWidth sont la hauteur/largeur intrinsèque de l'image (et sont HTML5 seulement).

j'ai utilisé une image d'un beau papillon, à partir d'un fichier avec une hauteur de 300 et une largeur de 400. Et ce Javascript:

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

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

puis J'ai utilisé ce HTML, avec inline CSS pour la hauteur et la largeur.

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

Résultats:

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

/*Actual Rendered size*/    120                  150

j'ai alors changé le HTML en ce qui suit:

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

c'est à dire à l'aide de la hauteur et la largeur des attributs plutôt que de styles en ligne

Résultats:

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

/*Actual Rendered size*/     90                  115

j'ai alors changé le HTML en ce qui suit:

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

, c'est-à-dire en utilisant à la fois les attributs et CSS, pour voir qui a la priorité.

Résultats:

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

/*Actual Rendered size*/    120                  150
89
répondu paulo62 2017-08-08 22:45:35

en utilisant JQuery vous faites ceci:

var imgWidth = $("#imgIDWhatever").width();
62
répondu Ian Suttle 2009-03-08 06:59:57

la chose que tous les autres ont oublié est que vous ne pouvez pas vérifier la taille de l'image avant qu'elle ne se charge. Lorsque l'auteur vérifie tous posté méthodes il fonctionnera probablement seulement sur localhost. Puisque jQuery peut être utilisé ici, rappelez-vous que l'événement' ready ' est déclenché avant que les images ne soient chargées. $ ('#xxx').width() et .height () devrait être tiré en onload event ou plus tard.

26
répondu Thinker 2009-03-10 13:54:42

vous ne pouvez vraiment le faire qu'en utilisant un rappel de l'événement load car la taille de l'image n'est pas connue jusqu'à ce qu'elle ait réellement terminé le chargement. Quelque chose comme le code ci-dessous...

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';
18
répondu Lee Hesselden 2009-08-04 11:50:29

Avec jQuery bibliothèque

utiliser .width() et .height() .

Plus jQuery "largeur de 151960920" et jQuery hauteur .

Exemple De Code -

$(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>
8
répondu Abrar Jahin 2016-06-30 04:53:46

ok les gars, je pense que j'ai amélioré le code source pour être en mesure de laisser le chargement d'image avant d'essayer de découvrir ses propriétés, sinon il affichera '0 * 0', parce que la prochaine déclaration aurait été appelé avant le fichier a été chargé dans le navigateur. Nécessite 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']);
}
7
répondu claudio 2011-03-01 21:41:00

avant d'utiliser la taille réelle de l'image, vous devez charger l'image source. Si vous utilisez jQuery framework vous pouvez obtenir la taille réelle de l'image de manière simple.

$("ImageID").load(function(){
  console.log($(this).width() + "x" + $(this).height())
})
6
répondu sub 2012-12-19 13:41:53

Ce réponse était exactement ce que je cherchais (en jQuery):

var imageNaturalWidth = $('image-selector').prop('naturalWidth');
var imageNaturalHeight = $('image-selector').prop('naturalHeight');
4
répondu dev101 2017-05-23 12:26:35

JQuery Answer:

$height = $('#image_id').height();
$width  = $('#image_id').width();
2
répondu Eli Geske 2013-01-02 07:16:44

simplement, vous pouvez tester comme ceci.

  <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
répondu cloudrain21 2016-03-26 02:31:45

vous pouvez également utiliser:

var image=document.getElementById("imageID");
var width=image.offsetWidth;
var height=image.offsetHeight;
1
répondu praveenjayapal 2012-02-18 01:05:41

Nicky De Maeyer a demandé après une image de fond; je l'obtiens simplement de la css et remplace le" url ()":

var div = $('#my-bg-div');
var url = div.css('background-image').replace(/^url\(\'?(.*)\'?\)$/, '');
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()));
}
1
répondu Hraban 2012-04-19 15:09:43
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 ...
1
répondu user3496915 2014-04-04 07:46:30

récemment, j'ai eu le même problème pour une erreur dans le curseur flex. La hauteur de la première image a été définie plus petite en raison du retard de chargement. J'ai essayé la méthode suivante pour résoudre ce problème et cela a fonctionné.

// 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';

cela vous donnera la hauteur par rapport à la largeur que vous avez définie plutôt que la largeur d'origine ou zéro.

1
répondu muhammed basil 2014-10-14 14:37:51

vous pouvez appliquer la propriété onload handler lorsque la page se charge en js ou jquery comme ceci: -

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

 });
1
répondu Harkamal Singh 2015-03-12 09:59:18
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.

C'est ma méthode, j'espère que ça utile. :)

1
répondu DHA 2015-10-01 13:16:28

il est important de supprimer le paramètre interprété par le navigateur du div parent. Donc, si vous voulez la vraie largeur de l'image et la hauteur, vous pouvez juste utiliser

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

ceci est un exemple de projet de TYPO3 de ma part où j'ai besoin des propriétés réelles de l'image pour la dimensionner avec la bonne relation.

0
répondu Rogoit 2014-10-12 09:45:27
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]);
}

ce travail pour l'aperçu d'image multiple et télécharger . si vous devez sélectionner pour chacune des images une par une . Puis copiez et passez dans toute la fonction de prévisualisation de l'image et validez!!!

0
répondu danielad 2016-02-09 15:41:24

avant d'acquérir les attributs d'un élément,la page de document doit être chargée:

window.onload=function(){
    console.log(img.offsetWidth,img.offsetHeight);
}
0
répondu 中国程序员 2017-02-03 03:28:01