114 votes

JS - récupérer la largeur et la hauteur de l'image à partir du code base64

J'ai un img codé en base64 que vous pouvez trouver ici . Comment puis-je obtenir la hauteur et la largeur de celui-ci ?

175voto

gp. Points 3015
var i = new Image(); 

i.onload = function(){
 alert( i.width+", "+i.height );
};

i.src = imageData;

50voto

AlexanderZ Points 11

Pour une utilisation synchrone, il suffit de l'envelopper dans une promesse comme ceci :

function getImageDimensions(file) {
  return new Promise (function (resolved, rejected) {
    var i = new Image()
    i.onload = function(){
      resolved({w: i.width, h: i.height})
    };
    i.src = file
  })
}

alors vous pouvez utiliser await pour obtenir les données dans un style de codage synchrone :

var dimensions = await getImageDimensions(file)

22voto

soupenvy Points 154

J'ai découvert qu'en utilisant .naturalWidth y .naturalHeight a obtenu les meilleurs résultats.

const img = new Image();

img.src = 'https://via.placeholder.com/350x150';

img.onload = function() {
  const imgWidth = img.naturalWidth;
  const imgHeight = img.naturalHeight;

  console.log('imgWidth: ', imgWidth);
  console.log('imgHeight: ', imgHeight);
};

Docs :

Cette fonction n'est prise en charge que par les navigateurs modernes. http://www.jacklmoore.com/notes/naturalwidth-and-naturalheight-in-ie/

2voto

Desu Points 346

Créez un caché <img> avec cette image et ensuite utiliser jquery .width() et . height()

$("body").append("<img id='hiddenImage' src='"+imageData+"' />");
var width = $('#hiddenImage').width();
var height = $('#hiddenImage').height();
$('#hiddenImage').remove();
alert("width:"+width+" height:"+height);

Testez ici : FIDDLE

L'image n'est pas initialement créée cachée. Elle est créée, puis vous obtenez la largeur et la hauteur, puis vous la supprimez. Cela peut entraîner une visibilité très courte pour les grandes images ; dans ce cas, vous devez envelopper l'image dans un autre conteneur et rendre ce conteneur caché, mais pas l'image elle-même.


Un autre violon qui ne s'ajoute pas à dom comme par la réponse de gp : ICI

2voto

Waruyama Points 1152

Une solution plus moderne consiste à utiliser HTMLImageElement.decode() au lieu de la onload événement. decode() renvoie une promesse, et peut donc être utilisé de manière synchrone avec await .

Utilisation asynchrone :

let img = new Image();
img.src = "myImage.png";
img.decode().then(() => {
    let width = img.width;
    let height = img.height;
    // Do something with dimensions
});

Utilisation synchrone (à l'intérieur d'une fonction asynchrone) :

let img = new Image();
img.src = "myImage.png";
await img.decode();
let width = img.width;
let height = img.height;
// Do something with dimensions

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X