image-size vs imageinfo
Image Metadata and Size Analysis Libraries Comparison
1 Year
image-sizeimageinfoSimilar Packages:
What's Image Metadata and Size Analysis Libraries?

Image metadata and size analysis libraries are essential tools in web development for handling image files. They allow developers to extract useful information such as dimensions, file size, and other metadata from image files without the need for complex image processing libraries. These libraries are particularly useful for optimizing images for web applications, ensuring that images are appropriately sized and formatted before being served to users, which can significantly enhance performance and user experience.

Package Weekly Downloads Trend
Github Stars Ranking
Stat Detail
Package
Downloads
Stars
Size
Issues
Publish
License
image-size11,912,6192,096378 kB294 days agoMIT
imageinfo8,08059-413 years ago-
Feature Comparison: image-size vs imageinfo

Functionality

  • image-size:

    image-size provides a simple API to retrieve the width and height of an image file. It supports multiple formats such as JPEG, PNG, GIF, and more, making it versatile for basic size checks without loading the entire image into memory.

  • imageinfo:

    imageinfo offers a broader range of functionality, allowing users to extract detailed metadata from images, including dimensions, file type, and EXIF data. This package is ideal for applications that need to analyze images in-depth.

Performance

  • image-size:

    image-size is optimized for speed, allowing for quick retrieval of image dimensions without unnecessary overhead. It reads only the necessary parts of the image file, making it efficient for applications that require rapid processing of multiple images.

  • imageinfo:

    imageinfo may be slower compared to image-size due to its comprehensive analysis of image metadata. It reads more data from the file to provide detailed information, which can be a trade-off for applications that prioritize depth of information over speed.

Ease of Use

  • image-size:

    image-size has a straightforward API that is easy to implement, making it accessible for developers who need a quick solution for image dimension retrieval. Its simplicity allows for rapid integration into projects without extensive documentation review.

  • imageinfo:

    imageinfo, while still user-friendly, may require a bit more understanding of the metadata it can extract. Developers may need to familiarize themselves with the types of metadata available and how to access them effectively.

Supported Formats

  • image-size:

    image-size supports a wide range of image formats, including JPEG, PNG, GIF, and BMP, making it a flexible choice for most web applications that handle common image types.

  • imageinfo:

    imageinfo also supports various formats but goes further by providing detailed information for formats that include metadata, such as TIFF and RAW files, making it suitable for applications that deal with professional photography or detailed image analysis.

Use Cases

  • image-size:

    image-size is ideal for applications that require quick checks of image dimensions, such as image upload validation, responsive design implementations, or basic image processing tasks.

  • imageinfo:

    imageinfo is better suited for applications that need to analyze images for quality control, digital asset management, or any scenario where understanding the full context of an image is crucial.

How to Choose: image-size vs imageinfo
  • image-size:

    Choose image-size if you need a lightweight solution specifically focused on quickly retrieving the dimensions of various image formats. It is straightforward and efficient for applications that require minimal overhead and fast performance.

  • imageinfo:

    Choose imageinfo if you require comprehensive metadata extraction from images, including not just dimensions but also additional information like EXIF data, color profiles, and more. This package is more suitable for applications that need detailed insights into image properties.

README for image-size

image-size

Build Status Package Version Downloads

Fast, lightweight NodeJS package to get dimensions of any image file or buffer.

Key Features

  • Zero dependencies
  • Supports all major image formats
  • Works with both files and buffers
  • Minimal memory footprint - reads only image headers
  • ESM and CommonJS support
  • TypeScript types included

Supported formats

  • BMP
  • CUR
  • DDS
  • GIF
  • HEIC (HEIF, AVCI, AVIF)
  • ICNS
  • ICO
  • J2C
  • JPEG-2000 (JP2)
  • JPEG
  • JPEG-XL
  • KTX (1 and 2)
  • PNG
  • PNM (PAM, PBM, PFM, PGM, PPM)
  • PSD
  • SVG
  • TGA
  • TIFF
  • WebP

Installation

npm install image-size
# or
yarn add image-size
# or
pnpm add image-size

Usage

Passing in a Buffer/Uint8Array

Best for streams, network requests, or when you already have the image data in memory.

import { imageSize } from 'image-size'
// or
const { imageSize } = require('image-size')

const dimensions = imageSize(buffer)
console.log(dimensions.width, dimensions.height)

Reading from a file

Best for local files. Returns a promise.

import { imageSizeFromFile } from 'image-size/fromFile'
// or
const { imageSizeFromFile } = require('image-size/fromFile')

const dimensions = await imageSizeFromFile('photos/image.jpg')
console.log(dimensions.width, dimensions.height)

Note: Reading from files has a default concurrency limit of 100 To change this limit, you can call the setConcurrency function like this:

import { setConcurrency } from 'image-size/fromFile'
// or
const { setConcurrency } = require('image-size/fromFile')
setConcurrency(123456)

3. Command Line

Useful for quick checks.

npx image-size image1.jpg image2.png

Multi-size

If the target file/buffer is an HEIF, an ICO, or a CUR file, the width and height will be the ones of the largest image in the set.

An additional images array is available and returns the dimensions of all the available images

import { imageSizeFromFile } from 'image-size/fromFile'
// or
const { imageSizeFromFile } = require('image-size/fromFile')

const { images } = await imageSizeFromFile('images/multi-size.ico')
for (const dimensions of images) {
  console.log(dimensions.width, dimensions.height)
}

Using a URL

import url from 'node:url'
import http from 'node:http'
import { imageSize } from 'image-size'

const imgUrl = 'http://my-amazing-website.com/image.jpeg'
const options = url.parse(imgUrl)

http.get(options, function (response) {
  const chunks = []
  response
    .on('data', function (chunk) {
      chunks.push(chunk)
    })
    .on('end', function () {
      const buffer = Buffer.concat(chunks)
      console.log(imageSize(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

Disabling certain image types

import { disableTypes } from 'image-size'
// or
const { disableTypes } = require('image-size')

disableTypes(['tiff', 'ico'])

JPEG image orientation

If the orientation is present in the JPEG EXIF metadata, it will be returned by the function. The orientation value is a number between 1 and 8 representing a type of orientation.

import { imageSizeFromFile } from 'image-size/fromFile'
// or
const { imageSizeFromFile } = require('image-size/fromFile')

const { width, height, orientation } = await imageSizeFromFile('images/photo.jpeg')
console.log(width, height, orientation)

Limitations

  1. Partial File Reading

    • Only reads image headers, not full files
    • Some corrupted images might still report dimensions
  2. SVG Limitations

    • Only supports pixel dimensions and viewBox
    • Percentage values not supported
  3. File Access

    • Reading from files has a default concurrency limit of 100
    • Can be adjusted using setConcurrency()
  4. Buffer Requirements

    • Some formats (like TIFF) require the full header in buffer
    • Streaming partial buffers may not work for all formats

License

MIT

Credits

not a direct port, but an attempt to have something like dabble's imagesize as a node module.

Contributors