What is image-size?
The image-size npm package is a module that provides a simple API to determine the dimensions of an image file. It supports a variety of image formats, including but not limited to JPEG, PNG, GIF, BMP, and WebP. The package can be used in both synchronous and asynchronous contexts and can handle local files as well as remote images via URLs.
What are image-size's main functionalities?
Synchronous image size retrieval
This feature allows you to synchronously get the dimensions of an image by providing the path to the image file.
const sizeOf = require('image-size');
const dimensions = sizeOf('path/to/image.jpg');
console.log(dimensions.width, dimensions.height);
Asynchronous image size retrieval
This feature allows you to asynchronously get the dimensions of an image by providing the path to the image file and a callback function.
const sizeOf = require('image-size');
sizeOf('path/to/image.jpg', (err, dimensions) => {
if (err) throw err;
console.log(dimensions.width, dimensions.height);
});
Image size retrieval from a buffer
This feature allows you to get the dimensions of an image from a buffer, which is useful when you have the image data in memory rather than stored in a file.
const sizeOf = require('image-size');
const fs = require('fs');
fs.readFile('path/to/image.jpg', (err, data) => {
if (err) throw err;
const dimensions = sizeOf(data);
console.log(dimensions.width, dimensions.height);
});
Other packages similar to image-size
sharp
Sharp is a high-performance Node.js image processing library that provides a wide range of functionality including resizing, cropping, rotating, and format conversion. It is faster than image-size as it's built on libvips, but it's more complex and has a larger footprint.
jimp
Jimp is an image processing library for Node.js that allows for image manipulation and conversion in pure JavaScript without any native dependencies. It offers more features than image-size, such as image manipulation, but it is slower due to its JavaScript-based implementation.
probe-image-size
Probe-image-size is a Node.js module to determine image sizes and types in a streaming fashion, which can be useful for remote images. It is similar to image-size but focuses on working with streams and can handle partial data, which is useful for getting dimensions without downloading the whole image.
image-size
A Node module to get dimensions of any image file
Supported formats
- BMP
- CUR
- GIF
- ICNS
- ICO
- JPEG
- PNG
- PSD
- TIFF
- WebP
- SVG
- DDS
Upcoming
Programmatic Usage
npm install image-size --save
Synchronous
var sizeOf = require('image-size');
var dimensions = sizeOf('images/funny-cats.png');
console.log(dimensions.width, dimensions.height);
Asynchronous
var sizeOf = require('image-size');
sizeOf('images/funny-cats.png', function (err, dimensions) {
console.log(dimensions.width, dimensions.height);
});
NOTE: The asynchronous version doesn't work if the input is a Buffer. Use synchronous version instead.
Also, the asynchronous functions have a default concurreny limit of 100
To change this limit, you can call the setConcurrency
function like this:
var sizeOf = require('image-size');
sizeOf.setConcurrency(123456)
Using promises (node 8.x)
var { promisify } = require('util');
var sizeOf = promisify(require('image-size'));
sizeOf('images/funny-cats.png')
.then(dimensions => { console.log(dimensions.width, dimensions.height); })
.catch(err => console.error(err));
Async/Await (Typescript & ES7)
var { promisify } = require('util');
var sizeOf = promisify(require('image-size'));
(async () => {
try {
const dimensions = await sizeOf('images/funny-cats.png');
console.log(dimensions.width, dimensions.height);
} catch (err) {
console.error(err);
}
})().then(c => console.log(c));
Multi-size
If the target file is an icon (.ico) or a cursor (.cur), the width
and height
will be the ones of the first found image.
An additional images
array is available and returns the dimensions of all the available images
var sizeOf = require('image-size');
var images = sizeOf('images/multi-size.ico').images;
for (const dimensions of images) {
console.log(dimensions.width, dimensions.height);
}
Using a URL
var url = require('url');
var http = require('http');
var sizeOf = require('image-size');
var imgUrl = 'http://my-amazing-website.com/image.jpeg';
var options = url.parse(imgUrl);
http.get(options, function (response) {
var chunks = [];
response.on('data', function (chunk) {
chunks.push(chunk);
}).on('end', function() {
var buffer = Buffer.concat(chunks);
console.log(sizeOf(buffer));
});
});
You can optionally check the buffer lengths & stop downloading the image after a few kilobytes.
You don't need to download the entire image
Command-Line Usage (CLI)
npm install image-size --global
image-size image1 [image2] [image3] ...
Credits
not a direct port, but an attempt to have something like
dabble's imagesize as a node module.