Hoe krijg ik de afbeeldingsgrootte (hoogte en breedte) met JavaScript?

Zijn er JavaScript- of jQuery-API’s of methoden om de afmetingen van een afbeelding op de pagina te krijgen?


Antwoord 1, autoriteit 100%

U kunt de afbeelding programmatisch ophalen en de afmetingen controleren met Javascript…

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

Antwoord 2, autoriteit 54%

clientWidthen clientHeightzijn DOM-eigenschappen die de huidige grootte in de browser weergeven van de binnenafmetingen van een DOM-element (exclusief marge en rand). Dus in het geval van een IMG-element krijgt dit de werkelijke afmetingen van de zichtbare afbeelding.

var img = document.getElementById('imageid'); 
//or however you get a handle to the IMG
var width = img.clientWidth;
var height = img.clientHeight;

Antwoord 3, autoriteit 47%

Ook (naast de antwoorden van Rex en Ian) is er:

imageElement.naturalHeight

en

imageElement.naturalWidth

Deze geven de hoogte en breedte van het afbeeldingsbestand zelf (in plaats van alleen het afbeeldingselement).


Antwoord 4, autoriteit 13%

Als u JQuery gebruikt en u de beeldformaten aanvraagt, moet u wachten totdat ze laden of u alleen nullen krijgt.

$(document).ready(function() {
    $("img").load(function() {
        alert($(this).height());
        alert($(this).width());
    });
});

Antwoord 5, Autoriteit 12%

Ik denk dat een update van deze antwoorden nuttig is omdat een van de best verkozen antwoorden suggereert met behulp van clientWidthen clientheight, waarvan ik denk dat het nu achterhaald is.

Ik heb enkele experimenten gedaan met HTML5, om te zien welke waarden daadwerkelijk worden geretourneerd.

Allereerst gebruikte ik een programma met de naam Dash om een ​​overzicht van de afbeelding API te krijgen.
Het verklaart dat heighten widthzijn de gerenderde hoogte / breedte van de afbeelding en dat naturalHeighten naturalWidthzijn de Intrinsieke hoogte / breedte van de afbeelding (en zijn alleen HTML5).

Ik heb een afbeelding van een prachtige vlinder gebruikt, uit een bestand met hoogte 300 en breedte 400. En dit JavaScript:

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

Dan gebruikte ik deze HTML, met inline CSS voor de hoogte en breedte.

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

Resultaten:

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

Ik heb toen de HTML gewijzigd in het volgende:

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

d.w.z. hoogte- en breedtekenmerken gebruiken in plaats van inline-stijlen

Resultaten:

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

Ik heb toen de HTML gewijzigd in het volgende:

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

d.w.z. zowel attributen als CSS gebruiken om te zien welke voorrang heeft.

Resultaten:

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

Antwoord 6, autoriteit 8%

Met JQuery doet u dit:

var imgWidth = $("#imgIDWhatever").width();

Antwoord 7, autoriteit 3%

Wat alle anderen zijn vergeten, is dat je de afbeeldingsgrootte niet kunt controleren voordat deze wordt geladen. Wanneer de auteur alle geposte methoden controleert, zal het waarschijnlijk alleen werken op localhost. Aangezien jQuery hier kan worden gebruikt, moet u er rekening mee houden dat de ‘ready’-gebeurtenis wordt geactiveerd voordat afbeeldingen worden geladen. $(‘#xxx’).width() en .height() moeten worden geactiveerd in de onload-gebeurtenis of later.


Antwoord 8, autoriteit 2%

Je kunt dit alleen echt doen door een callback van de load-gebeurtenis te gebruiken, aangezien de grootte van de afbeelding pas bekend is als deze daadwerkelijk is geladen. Zoiets als de onderstaande code…

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

Antwoord 9, autoriteit 2%

Laten we alles wat we hier hebben geleerd combineren in één eenvoudige functie (imageDimensions()). Het maakt gebruik van beloftes.

// helper to get dimensions of an image
const imageDimensions = file => 
    new Promise((resolve, reject) => {
        const img = new Image()
        // the following handler will fire after the successful loading of the image
        img.onload = () => {
            const { naturalWidth: width, naturalHeight: height } = img
            resolve({ width, height })
        }
        // and this handler will fire if there was an error with the image (like if it's not really an image or a corrupted one)
        img.onerror = () => {
            reject('There was some problem with the image.')
        }
        img.src = URL.createObjectURL(file)
})
// here's how to use the helper
const getInfo = async ({ target: { files } }) => {
    const [file] = files
    try {
        const dimensions = await imageDimensions(file)
        console.info(dimensions)
    } catch(error) {
        console.error(error)
    }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/7.0.0-beta.3/babel.min.js"></script>
Select an image:
<input
  type="file"
  onchange="getInfo(event)"
/>
<br />
<small>It works offline.</small>

Antwoord 10

Aangenomen, we willen beeldafmetingen krijgen van <img id="an-img" src"...">

// Query after all the elements on the page have loaded.
// Or, use `onload` on a particular element to check if it is loaded.
document.addEventListener('DOMContentLoaded', function () {
  var el = document.getElementById("an-img");
  console.log({
    "naturalWidth": el.naturalWidth, // Only on HTMLImageElement
    "naturalHeight": el.naturalHeight, // Only on HTMLImageElement
    "offsetWidth": el.offsetWidth,
    "offsetHeight": el.offsetHeight
  });

Natuurlijke afmetingen

el.naturalWidthen el.naturalHeightkrijgt ons de Natuurlijke afmetingen , de afmetingen van het afbeeldingsbestand.

Lay-out dimensies

el.offsetWidthEN el.offsetHeightKrijgt ons de afmetingen waarop het element wordt weergegeven op het document.


Antwoord 11

oké jongens, ik denk dat ik de broncode heb verbeterd om de afbeelding te kunnen laden voordat ik de eigenschappen ervan probeer te achterhalen, anders wordt ‘0 * 0’ weergegeven, omdat de volgende instructie vóór het bestand zou zijn aangeroepen werd in de browser geladen. Vereist 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']);
}

Antwoord 12

Ditantwoord was precies wat ik zocht (in jQuery):

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

Antwoord 13

Met jQuerybibliotheek-

Gebruik .width()en .height().

Meer in jQuery-breedteen jQuery-hoogte.

Voorbeeldcode-

$(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="https://images.all-free-download.com/images/graphicthumb/beauty_of_nature_9_210287.jpg">
<button>Display dimensions of img</button>

Antwoord 14

Voordat u de werkelijke afbeeldingsgrootte gebruikt, moet u de bronafbeelding laden. Als u het JQuery-framework gebruikt, kunt u op een eenvoudige manier de echte afbeeldingsgrootte krijgen.

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

Antwoord 15

Ik dacht dat dit nuttig zou kunnen zijn voor sommigen die in 2019 Javascript en/of Typescript gebruiken.

Ik vond het volgende, zoals sommigen hebben gesuggereerd, onjuist:

let img = new Image();
img.onload = function() {
  console.log(this.width, this.height) // Error: undefined is not an object
};
img.src = "http://example.com/myimage.jpg";

Dit is correct:

let img = new Image();
img.onload = function() {
  console.log(img.width, img.height)
};
img.src = "http://example.com/myimage.jpg";

Conclusie:

Gebruik img, niet this, in de functie onload.


Antwoord 16

JQuery-antwoord:

$height = $('#image_id').height();
$width  = $('#image_id').width();

Antwoord 17

Om de natuurlijke hoogte en breedte te krijgen:

document.querySelector("img").naturalHeight;
document.querySelector("img").naturalWidth;
<img src="img.png">

Antwoord 18

Onlangs had ik hetzelfde probleem met een fout in de flex-schuifregelaar. De hoogte van de eerste afbeelding was kleiner ingesteld vanwege de vertraging bij het laden. Ik heb de volgende methode geprobeerd om dat probleem op te lossen en het heeft gewerkt.

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

Dit geeft u de hoogte ten opzichte van de breedte die u instelt in plaats van de oorspronkelijke breedte of nul.


Antwoord 19

Dit is een alternatief antwoord voor Node.js, dat is waarschijnlijk niet wat de OP bedoelde, maar zou van pas kunnen komen en lijkt binnen de reikwijdte van de vraag te vallen.

Dit is een oplossing met Node.Js, het voorbeeld gebruikt NEXT.JS Framework, maar zou werken met elk knooppunt. Het maakt gebruik van probe-image-sizenpm-pakket om op te lossen de beeldattributen van de serverzijde.

Voorbeeld Gebruik Case : Ik heb de onderstaande code gebruikt om de grootte van een afbeelding uit een Airtable Automation-script op te lossen, die mijn eigen analyzeImageAPI oproept en de rekwisieten van het beeld retourneert .

import {
  NextApiRequest,
  NextApiResponse,
} from 'next';
import probe from 'probe-image-size';
export const analyzeImage = async (req: NextApiRequest, res: NextApiResponse): Promise<void> => {
  try {
    const result = await probe('http://www.google.com/intl/en_ALL/images/logo.gif');
    res.json(result);
  } catch (e) {
    res.json({
      error: true,
      message: process.env.NODE_ENV === 'production' ? undefined : e.message,
    });
  }
};
export default analyzeImage;

rendementen:

{
"width": 276,
"height": 110,
"type": "gif",
"mime": "image/gif",
"wUnits": "px",
"hUnits": "px",
"length": 8558,
"url": "http://www.google.com/intl/en_ALL/images/logo.gif"
}

Antwoord 20

Nicky de Maeyer vroeg na een achtergrondfoto; Ik haal het gewoon uit de CSS en vervang de “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()));
}

Antwoord 21

U kunt de eigenschap onload handler toepassen wanneer de pagina als volgt in js of jQuery wordt geladen:-

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

Antwoord 22

Je kunt gewoon zo testen.

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

Antwoord 23

Misschien helpt dit anderen. In mijn geval heb ik een Filetype (dat is gegarandeerd een afbeelding) & Ik wil de afmetingen van de afbeelding zonder deze op de DOM te laden.

Algemene strategie: Converteer Filenaar ArrayBuffer-> Converteer ArrayBuffernaar base64 string -> gebruik dit als de afbeeldingsbron met een Imageclass -> gebruik naturalHeight& naturalWidthom afmetingen te krijgen.

const fr = new FileReader();
fr.readAsArrayBuffer(image); // image the the 'File' object
fr.onload = () => {
  const arrayBuffer: ArrayBuffer = fr.result as ArrayBuffer;
  // Convert to base64. String.fromCharCode can hit stack overflow error if you pass
  // the entire arrayBuffer in, iteration gets around this
  let binary = '';
  const bytes = new Uint8Array(arrayBuffer);
  bytes.forEach(b => binary += String.fromCharCode(b));
  const base64Data = window.btoa(binary);
  // Create image object. Note, a default width/height MUST be given to constructor (per 
  // the docs) or naturalWidth/Height will always return 0.
  const imageObj = new Image(100, 100);
  imageObj.src = `data:${image.type};base64,${base64Data}`;
  imageObj.onload = () => {
    console.log(imageObj.naturalWidth, imageObj.naturalHeight);
  }
}

Hiermee kunt u de afmetingen van de afbeelding & beeldverhouding allemaal uit een Filezonder het te renderen. Kan de onload-functies gemakkelijk converteren naar RxJS Observables met behulp van fromEventvoor een betere asynchrone ervaring:

// fr is the file reader, this is the same as fr.onload = () => { ... }
fromEvent(fr, 'load')

Antwoord 24

Mijn twee cent in jQuery

Disclaimer: dit is niet noodzakelijk een antwoord op deze vraag, maar verbreedt onze mogelijkheden. Getest en werkend in jQuery 3.3.1

Laten we overwegen:

  1. U hebt de afbeelding-URL / PAD en u wilt de beeldbreedte en hoogte krijgen zonder deze op de DOM te geven,

  2. Voordat u de afbeelding op de DOM wilt weergeven, moet u offsetparent knooppunt of afbeelding DIVE WRIMPER-element instellen op beeldbreedte en hoogte, om een ​​vloeistofwikkelaar te maken voor verschillende afbeeldingsgrootte, dwz bij het klikken op een knop om de afbeelding op een knop te bekijken Modal / lightbox

Dit is hoe ik het zal doen:

// image path
const imageUrl = '/path/to/your/image.jpg'
// Create dummy image to get real width and height
$('<img alt="" src="">').attr("src", imageUrl).on('load', function(){
    const realWidth = this.width;
    const realHeight = this.height;
    alert(`Original width: ${realWidth}, Original height: ${realHeight}`);
})

Antwoord 25

U kunt ook gebruiken:

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

Antwoord 26

Het is belangrijk om de instelling van de browser uit de ouder DIV te verwijderen. Dus als je wilt dat de echte beeldbreedte en hoogte je gewoon

gebruiken

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

Dit is één typo3-projectvoorbeeld van mij, waar ik de echte eigenschappen van de afbeelding nodig heb om het te schalen met de juiste relatie.


Antwoord 27

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.

Dit is mijn methode, ik hoop dat dit nuttig is. 🙂


Antwoord 28

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]);
}

dit werkt voor het bekijken en uploaden van meerdere afbeeldingen. als u voor elk van de afbeeldingen één voor één moet selecteren. Kopieer en plak vervolgens in alle voorbeeldafbeeldingsfuncties en valideer!!!


Antwoord 29

Voordat u de kenmerken van het element verwerft, moet de documentpagina worden geladen:

window.onload=function(){
    console.log(img.offsetWidth,img.offsetHeight);
}

Antwoord 30

geef gewoon het img-bestandsobject door dat wordt verkregen door het invoerelement wanneer we het juiste bestand selecteren, het geeft de netto hoogte en breedte van de afbeelding

function getNeturalHeightWidth(file) {
     let h, w;
     let reader = new FileReader();
      reader.onload = () => {
        let tmpImgNode = document.createElement("img");
        tmpImgNode.onload = function() {
          h = this.naturalHeight;
          w = this.naturalWidth;
        };
        tmpImgNode.src = reader.result;
      };
      reader.readAsDataURL(file);
    }
   return h, w;
}

Other episodes