I have a Base64 image encoded that you can find here. How can I get the height and the width of it?
-
5Link rot has set in for this questionLuke– Luke2022-01-10 12:35:00 +00:00Commented Jan 10, 2022 at 12:35
-
Yep. "Hmm. We’re having trouble finding that site. We can’t connect to the server at soo.gd."Peter Mortensen– Peter Mortensen2023-01-31 02:56:14 +00:00Commented Jan 31, 2023 at 2:56
6 Answers
var i = new Image();
i.onload = function(){
alert(i.width + ", " + i.height);
};
i.src = imageData;
8 Comments
imageData should be in the format data:image/png;base64, then the base 64 image data.For synchronous use just wrap it into a promise like this:
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
})
}
then you can use await to get the data in synchronous coding style:
var dimensions = await getImageDimensions(file)
2 Comments
I found that using .naturalWidth and .naturalHeight had the best results.
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);
};
Documentation:
This is only supported in modern browsers. NaturalWidth and NaturalHeight in IE
1 Comment
object-fitA more modern solution is to use HTMLImageElement.decode() instead of the onload event. decode() returns a promise and thus can be used synchronously with await.
Asynchronous use:
let img = new Image();
img.src = "myImage.png";
img.decode().then(() => {
let width = img.width;
let height = img.height;
// Do something with dimensions
});
Synchronous use (inside an async function):
let img = new Image();
img.src = "myImage.png";
await img.decode();
let width = img.width;
let height = img.height;
// Do something with dimensions
2 Comments
async. Synchronous is without any of async/await or .then().Create a hidden <img> with that image and then use jQuery's .width() and . height()
$("body").append("<img id='hiddenImage' src='" + imageData + "' />");
var width = $('#hiddenImage').width();
var height = $('#hiddenImage').height();
$('#hiddenImage').remove();
alert("width:" + width + " height:" + height);
Test here: JSFiddle
The image is not initially created hidden. It gets created, and then you get width and height and then remove it. This may cause a very short visibility in large images. In this case, you have to wrap the image in another container and make that container hidden, not the image itself.
Another Fiddle that does not add to the DOM as per gp.'s answer: here