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.