JS - pobierz szerokość i wysokość obrazu z kodu base64


Odpowiedzi:


152
var i = new Image(); 

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

i.src = imageData; 

1
po prostu super, sprawdzenie rozmiaru zajmuje połowę czasu, bardzo dziękuję!
bombastic

9
szkoda, że ​​jest to proces asynchroniczny.
Coen Damen

2
@CoenDamen yep. Potrzebuję również procesu synchronicznego.
1,21 gigawata

Jesteś niesamowity
Valdrinium,

13
Dodam też, że kolejność tutaj jest bardzo ważna. Jeśli zrobisz to na odwrót (src przed onload), możesz przegapić wydarzenie. Zobacz: stackoverflow.com/a/2342181/4826740
maxshuty

34

W przypadku użycia synchronicznego po prostu zawiń go w taką obietnicę:

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

następnie możesz użyć await, aby uzyskać dane w synchronicznym stylu kodowania:

var dimensions = await getImageDimensions(file)

1
Jednak nadal jest asynchroniczny. Używam tylko cukru syntaktycznego.
gustavopch

„naturalWidth” i „naturalHeight” to lepsze opcje, prawda? stackoverflow.com/questions/28167137/…
Crashalot,

11

Odkryłem, że używając .naturalWidthi .naturalHeightmiałem najlepsze wyniki.

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

Dokumenty:

Jest to obsługiwane tylko w nowoczesnych przeglądarkach. http://www.jacklmoore.com/notes/naturalwidth-and-naturalheight-in-ie/


2

Utwórz ukryty <img>obraz z tym obrazem, a następnie użyj jquery .width () i. wysokość()

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

Przetestuj tutaj: FIDDLE

Obraz nie jest początkowo tworzony jako ukryty. zostanie utworzony, a następnie uzyskasz szerokość i wysokość, a następnie ją usuniesz. Może to spowodować bardzo krótką widoczność w dużych obrazach, w tym przypadku musisz umieścić obraz w innym pojemniku i ukryć ten pojemnik, a nie sam obraz.


Kolejny Fiddle, który nie dodaje do domeny dom według odpowiedzi gp .: TUTAJ


var i = new Image (); i.src = imageData; setTimeout (function () {alert ("width:" + i.width + "height:" + i.height);}, 100);
gp.

jest to tylko poprawka potrzebna ze względu na naturę jsfiddle, zamiast tego można zmienić onLoad na onDomReady, aby naprawić początkowy problem z zerową szerokością i wysokością. Kod zakłada, że ​​wywołujesz tę funkcję gdzieś w swojej pracy, gdzie dokument jest już załadowany.
Desu

Chyba chodziło Ci o to, że nie musisz niczego dodawać do dom, aby uzyskać szerokość i wysokość. Zmodyfikuje odpowiedź, aby odzwierciedlić Twoje sugestie.
Desu
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.