Which is Better Image Metadata and Size Analysis Libraries?
image-size vs imageinfo
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.

NPM Package Downloads Trend
Github Stars Ranking
Stat Detail
Package
Downloads
Stars
Size
Issues
Publish
License
image-size10,154,9822,02950 kB339 months agoMIT
imageinfo9,39359-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

A Node module to get dimensions of any image file

Supported formats

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

Programmatic Usage

npm install image-size --save

or

yarn add image-size

Synchronous

const sizeOf = require("image-size")
const dimensions = sizeOf("images/funny-cats.png")
console.log(dimensions.width, dimensions.height)

Asynchronous

const 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 concurrency limit of 100 To change this limit, you can call the setConcurrency function like this:

const sizeOf = require("image-size")
sizeOf.setConcurrency(123456)

Using promises (nodejs 10.x+)

const { promisify } = require("util")
const 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)

const { promisify } = require("util")
const 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

const sizeOf = require("image-size")
const images = sizeOf("images/multi-size.ico").images
for (const dimensions of images) {
  console.log(dimensions.width, dimensions.height)
}

Using a URL

const url = require("url")
const http = require("http")

const sizeOf = require("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(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

Disabling certain image types

const imageSize = require("image-size")
imageSize.disableTypes(["tiff", "ico"])

Disabling all file-system reads

const imageSize = require("image-size")
imageSize.disableFS(true)

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.

const sizeOf = require("image-size")
const dimensions = sizeOf("images/photo.jpeg")
console.log(dimensions.orientation)

Command-Line Usage (CLI)

npm install image-size --global

or

yarn global add image-size

followed by

image-size image1 [image2] [image3] ...

Credits

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

Contributors