web-dev-qa-db-fra.com

JS - Obtenir la largeur et la hauteur de l'image à partir du code base64

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

77
bombastic
var i = new Image(); 

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

i.src = imageData; 
127
gp.

Pour une utilisation synchrone, intégrez une promesse comme celle-ci:

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 wait pour obtenir les données dans un style de codage synchrone:

var dimensions = await getImageDimensions(file)
25
EscapeNetscape

J'ai trouvé que l'utilisation de .naturalWidth et .naturalHeight avait les meilleurs résultats.

var img = new Image();

img.onload = function() {
    var imgWidth = img.naturalWidth,
        imgHeight = img.naturalHeight;
};

Ceci n'est supporté que par les navigateurs modernes. http://www.jacklmoore.com/notes/naturalwidth-and-naturalheight-in-ie/

5
Bill Keller

Créez un <img> Caché avec cette image, puis utilisez jquery .width () et. la taille()

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

Testez ici: [~ # ~] violon [~ # ~]

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


Un autre Fiddle qui n'ajoute pas à dom selon le gp .'s anser: [~ # ~] ici [~ # ~]

2
Desu