JavaScript: Bildabmessungen abrufen


94

Ich habe nur eine URL zu einem Bild. Ich muss die Höhe und Breite dieses Bildes nur mit JavaScript bestimmen. Das Bild kann für den Benutzer auf der Seite nicht sichtbar sein. Wie kann ich seine Abmessungen erhalten?



1
Tatsächlich ist diese Antwort die einzige, die wirklich richtig ist, da Sie warten müssen, bis das Bild geladen ist.
Schatten-Assistent ist Ohr für Sie

Antworten:


196
var img = new Image();

img.onload = function(){
  var height = img.height;
  var width = img.width;

  // code here to use the dimensions
}

img.src = url;

1
Es sei denn, Sie müssen die Abmessungen synchron erhalten. In diesem Fall müssen Sie nur das Bild in das Dokument einfügen (unter Verwendung einer absoluten Position irgendwo außerhalb des Ansichtsfensters). Die Abmessungen sind dann direkt nach dem Aufruf von document.appendChild () verfügbar.
JustAndrei

1
Warum ist onloadvorher als die URL des Bildes zu setzen?
Ajay Gaur

22
@AjayGaur da onloadist ein Listener, der asynchron aufgerufen wird, wenn das Bild korrekt geladen wird. Wenn Sie den Listener nach dem Festlegen der URL festlegen, wird das Bild möglicherweise geladen, kurz bevor der Code die Einstellung des Onloads selbst erreicht, sodass der Listener nie aufgerufen wird. Wenn Sie sich nach Analogien ein Glas mit Wasser servieren, gießen Sie zuerst das Wasser ein und setzen dann das Glas ein, um es zu füllen? Oder setzen Sie zuerst das Glas ein und gießen dann das Wasser hinein?
Biomorgoth

2
img.naturalWidth und img.naturalHeight ist die richtige Antwort
Kamlesh

Danke @Kamlesh Ich brauchte die natürlichen Dimensionen.
Idaho

42

Mach ein neues Image

var img = new Image();

Stellen Sie die src

img.src = your_src

Holen Sie sich das widthund dasheight

//img.width
//img.height

17
Ich erhalte immer wieder 0 für Breite und Höhe, wobei ich genau diesen Code verwende.
Adam Casey

11
Es scheint, dass das Bild geladen werden muss, was Sinn macht.
Adam Casey

3
zusätzliche Infos - obwohl dies bei mir zum ersten Mal funktionierte, war es zeitweise. Ich denke, das Problem ist, dass das Bild nicht heruntergeladen wurde. Ich habe das Problem behoben, indem ich den Code ausgeführt habe, der die Dimension im Onload-Ereignishandler wie folgt verwendet: img.onload = function () {};
Shumii

3
Dieser Code funktioniert, solange sich das Bild im Browser-Cache befindet. Sobald der Cache ungültig oder gelöscht ist. Es wird nicht funktionieren. Also nicht wirklich zuverlässig.
Bharatesh

2
Das funktioniert nicht, da das Bild noch nicht geladen ist. Das Laden des Bildes erfolgt asynchron, sodass Sie auf das Ladeereignis warten müssen.
user1702401

5

Dies nutzt die Funktion und wartet, bis sie abgeschlossen ist.

http://jsfiddle.net/SN2t6/118/

function getMeta(url){
    var r = $.Deferred();

  $('<img/>').attr('src', url).load(function(){
     var s = {w:this.width, h:this.height};
     r.resolve(s)
  });
  return r;
}

getMeta("http://www.google.hr/images/srpr/logo3w.png").done(function(test){
    alert(test.w + ' ' + test.h);
});

1
Warum sollte diese wiederverwendbare Funktion mit Stundungen herabgestuft werden?!
David Dunham

'nur JavaScript verwenden' und das ist jQuery, denke ich
Apolo

Sie erhalten eine positive Bewertung von mir, obwohl es jQuerry verwendet. Der Ansatz ist, dass es darauf ankommt.
krankuba

2

naturalWidth und naturalHeight

var img = document.createElement("img");
img.onload = function (event)
{
    console.log("natural:", img.naturalWidth, img.naturalHeight);
    console.log("width,height:", img.width, img.height);
    console.log("offsetW,offsetH:", img.offsetWidth, img.offsetHeight);
}
img.src = "image.jpg";
document.body.appendChild(img);

// css for tests
img { width:50%;height:50%; }

1

wenn Sie eine Bilddatei aus Ihrem Eingabeformular haben. Sie können so verwenden

let images = new Image();
images.onload = () => {
 console.log("Image Size", images.width, images.height)
}
images.onerror = () => result(true);

let fileReader = new FileReader();
fileReader.onload = () => images.src = fileReader.result;
fileReader.onerror = () => result(false);
if (fileTarget) {
   fileReader.readAsDataURL(fileTarget);
}


0

Holen Sie sich die Bildgröße mit jQuery

function getMeta(url){
    $("<img/>",{
        load : function(){
            alert(this.width+' '+this.height);
        },
        src  : url
    });
}

Holen Sie sich die Bildgröße mit JavaScript

function getMeta(url){   
    var img = new Image();
    img.onload = function(){
        alert( this.width+' '+ this.height );
    };
    img.src = url;
}

Holen Sie sich die Bildgröße mit JavaScript (moderne Browser, IE9 +)

function getMeta(url){   
    var img = new Image();
    img.addEventListener("load", function(){
        alert( this.naturalWidth +' '+ this.naturalHeight );
    });
    img.src = url;
}

Verwenden Sie das Obige einfach als: getMeta (" http://example.com/img.jpg ");

https://developer.mozilla.org/en/docs/Web/API/HTMLImageElement


-3

Mit dem folgenden Code fügen Sie jedem Bild auf der Seite die Höhe und Breite des Bildattributs hinzu.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Untitled</title>
<script type="text/javascript">
function addImgAttributes()
{
    for( i=0; i < document.images.length; i++)
    { 
        width = document.images[i].width;
        height = document.images[i].height;
        window.document.images[i].setAttribute("width",width);
        window.document.images[i].setAttribute("height",height);

    }
}
</script>
</head>
<body onload="addImgAttributes();">
<img src="2_01.jpg"/>
<img src="2_01.jpg"/>
</body>
</html>

13
Die Frage war, wie man Bildabmessungen erhält, ohne dem Benutzer ein Bild zu zeigen. Das Festlegen von Attributen für Bildbreite und -höhe nach der Anzeige des Bildes ist absolut sinnlos.
Jaroslaw Stavnichiy
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.