JS - получить ширину и высоту изображения из кода base64


Ответы:


152
var i = new Image(); 

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

i.src = imageData; 

1
просто потрясающе, на проверку размера уходит половина времени, большое вам спасибо!
— напыщенный

9
очень плохо, что это асинхронный процесс.
— Coen Damen

2
@CoenDamen ага. Мне тоже нужен синхронный процесс.
— 1,21 гигаватт

Ты потрясающий
— Вальдриниум

13
Еще добавлю, что порядок здесь очень важен. Если вы сделаете это наоборот (src перед onload), вы можете пропустить событие. См .: stackoverflow.com/a/2342181/4826740
— maxshuty

34

Для синхронного использования просто оберните его в обещание, подобное этому:

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

тогда вы можете использовать ожидание для получения данных в стиле синхронного кодирования:

var dimensions = await getImageDimensions(file)

1
Хотя это все еще асинхронно. Просто используя синтаксический сахар.
— gustavopch

NaturalWidth и naturalHeight - лучший выбор, не так ли? stackoverflow.com/questions/28167137/…
— Crashalot

11

Я нашел это, используя .naturalWidthи .naturalHeightполучил наилучшие результаты.

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

Документы:

Это поддерживается только в современных браузерах. http://www.jacklmoore.com/notes/naturalwidth-and-naturalheight-in-ie/


2

Создайте скрытый <img>с этим изображением, а затем используйте jquery .width () и. высота()

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

Протестируйте здесь: FIDDLE

Изображение изначально не создается скрытым. он создается, затем вы получаете ширину и высоту, а затем удаляете его. Это может привести к очень короткой видимости в больших изображениях, в этом случае вам нужно обернуть изображение в другой контейнер и сделать этот контейнер скрытым, а не само изображение.


Еще одна скрипка, которая не добавляет к dom в соответствии с anser gp.: ЗДЕСЬ


var i = новое изображение (); i.src = imageData; setTimeout (function () {alert ("width:" + i.width + "height:" + i.height);}, 100);
— gp.

это только исправление, необходимое из-за характера jsfiddle, вы можете изменить onLoad на onDomReady вместо этого, чтобы исправить эту начальную проблему ширины и высоты 0. Код предполагает, что вы вызываете эту функцию где-нибудь в своей работе, где документ уже загружен.
— Desu

Думаю, ваша точка зрения заключалась в том, что вам не нужно ничего добавлять к dom, чтобы получить ширину и высоту. Изменим ответ, чтобы отразить ваши предложения.
— Desu
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.