JS - get image width and height from the base64 code

我有一个 Base64img 编码,你可以找到 给你。我怎样才能得到它的高度和宽度?

106309 次浏览

使用该图像创建一个隐藏的 <img>,然后使用 jquery. width ()和. height ()

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

在这里测试: 小提琴

图像最初不是隐藏创建的。它被创建,然后你得到宽度和高度,然后删除它。这可能会导致大图像的可见性非常低,在这种情况下,您必须将图像包装在另一个容器中,并使该容器隐藏而不是图像本身。


另一个没有按照 gp 的回答增加 Dom 的小提琴: 给你

var i = new Image();


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


i.src = imageData;

我发现使用 .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);
};

文件:

这只在现代浏览器中支持

对于同步使用,只需将其包装成如下承诺:

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

然后您可以使用 wait 来获取同步编码风格的数据:

var dimensions = await getImageDimensions(file)

更现代的解决方案是使用 HTMLImageElement.decode()而不是 onload事件。decode()返回一个承诺,因此可以与 await同步使用。

异步使用:

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


同步使用(在异步函数内部) :

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