Is it possible to get the width and height of an image in node.js (on the server side, not the client side)? I need to find the width and height of an image in a node.js library that I'm writing.
-
1This appears to be a duplicate (and someone found an answer already): http://stackoverflow.com/questions/5530946/opening-images-on-nodejs-and-finding-out-width-height – Anderson Green Sep 22 '12 at 02:09
7 Answers
Installing GraphicsMagick
or ImageMagick
isn't at all needed, determining the dimensions of a image is as easy as looking at the header. image-size
is a pure javascript implementation of said feature which is very easy to use.
https://github.com/netroy/image-size
var sizeOf = require('image-size');
sizeOf('images/funny-cats.png', function (err, dimensions) {
console.log(dimensions.width, dimensions.height);
});

- 23,234
- 15
- 74
- 89
-
31This should be the accepted answer simply because gm/im have much more overhead than needed for this task. – theflowersoftime Jun 18 '14 at 18:40
-
7There is a [bug in image-size](https://github.com/netroy/image-size/issues/37). I just experienced it in production. GraphicsMagick does not have the same bug. – paldepind Sep 16 '15 at 07:50
-
4Not at all. image-size gives "Corrupt JPG, exceeded buffer limits" error on big jpg files – Gatunox Aug 10 '18 at 01:19
-
This is indeed a very good solution. And for those who require only a tiny bit of the logic for a specific format, for example, the library is very easy to extract and reduce. – Andry Oct 21 '21 at 11:19
-
If you are trying to use this in a context which doesn't allow `fs` or `path` imports, try using the `buffer-image-size` library instead ([from this answer](https://stackoverflow.com/a/71922563/2738164)). It explicitly forks `image-size` and removes those two dependencies. Very helpful for usage in Next.js static contexts. – bsplosion May 18 '23 at 16:09
Yes this is possible but you will need to install GraphicsMagick or ImageMagick.
I have used both and I can recommend GraphicsMagick it's lot faster.
Once you have installed both the program and it's module you would do something like this to get the width and height.
gm = require('gm');
// obtain the size of an image
gm('test.jpg')
.size(function (err, size) {
if (!err) {
console.log('width = ' + size.width);
console.log('height = ' + size.height);
}
});

- 27,244
- 10
- 65
- 75

- 3,861
- 3
- 25
- 23
-
In this case, how can I write a function that returns `size.width` for a given image, and invoke that function outside of the callback? – Anderson Green Sep 22 '12 at 02:56
-
2Also, here's a related question: http://stackoverflow.com/questions/12540405/how-can-i-specify-the-order-in-which-node-js-functions-are-evaluated – Anderson Green Sep 22 '12 at 03:22
-
-
Is there a way to do this without using an image library in pure JS? – Jasdeep Khalsa Jun 24 '13 at 09:47
-
3This is a great example of why you should always use curly brackets, only the first `console.log` is covered by the `if` statement. – Linus Unnebäck Nov 14 '13 at 15:43
-
1
-
Oliver, the link in the answer below this one shows an example of getting the dimensions of a remote URL. – Gavin Jun 23 '14 at 16:58
-
can anyone tell us how to get the remote URL image size please ? with 'https://' ?? – Sahan Jan 22 '16 at 04:34
https://github.com/nodeca/probe-image-size
More interesting problem is "how to detect image size without full file download from remote server". probe-image-size
will help. Of course, it supports local streams too.
It's written in pure JS and does not need any heavy dependencies (ImageMagick and so on).

- 13,684
- 16
- 77
- 148

- 3,340
- 26
- 21
Easiest way to do this with multer using buffer-image-size
I have used buffer-image-size to validate the image dimensions. I need to validate the exact image size before uploading it to the bucket.
var sizeOf = require('buffer-image-size');
var dimensions = sizeOf(yourImageBuffer);
console.log(dimensions.width, dimensions.height);
ex:
Router.js
Router.post('/upload_image',
multerUpload.single('image'), // multer upload configuration
imageDimensionHandler(500,200), // here I validate image dimension
upload_image_controller // controller function
);
here is my middleware that I used after multerUpload.single('image')
middleware.
imageDimensionHandler.js ( middleware )
const sizeOf = require('buffer-image-size');
const imageDimensionHandler = (width, height) => (async (req, res, next) => {
if (req.file) {
const fileBuffer = req.file.buffer;
var dimensions = sizeOf(fileBuffer);
if (width == dimensions.width && height == dimensions.height) {
next();
} else {
throw new Error(`expected image size is ${condition.width} x ${condition.height} pixel.`);
}
} else {
next();
}
});
Note: please ignore it if you don't find it appropriate for you.

- 189
- 1
- 9
Calipers is another pure Javascript library that can determine the dimensions of images.

- 172
- 1
- 1
- 13
I used Jimp: https://www.npmjs.com/package/jimp npm install --save jimp
const jimage1 = await Jimp.read(imgBuffer);
const jimage2 = await Jimp.read(imgUrl);
const width = jimage1.bitmap.width;
It's effectively a wrapper for pixel-match

- 337
- 3
- 11
var sizeOf = require('image-size');
sizeOf(my_file_item.completeFilename, function (err, dimensions) {
try{
if(!err){
let image_dimensions = dimensions || "";
let width = 200; // we want 200
let height = parseInt(width/(image_dimensions.width/image_dimensions.height));
}else{
}
// console.log(ex);
}catch(ex){
}
});

- 8,164
- 4
- 50
- 61