Node module for detecting image dimensions
  • TypeScript 98%
  • JavaScript 2%
Find a file
कारतोफ्फेलस्क्रिप्ट™ c12fa36f6c
Update Readme.md
2026-05-31 15:40:22 +02:00
.circleci upgrade dependencies and yarn 2023-12-28 13:22:43 +01:00
.github/workflows drop node 14/16, use 18 by default 2023-05-30 09:52:24 +00:00
.vscode migrate from mocha+chai+prettier+eslint to node-native testing tooling and biomejs (#417) 2024-12-23 22:34:37 +01:00
.yarn/plugins/@yarnpkg upgrade dependencies and yarn 2023-12-28 13:22:43 +01:00
bin fix the bin script 2025-03-03 15:04:11 +01:00
lib fix potential Denial of Service via specially crafted payloads (#436) 2025-04-02 16:20:03 +02:00
specs Setup tsup to support both CJS and ESM 2024-12-25 20:50:49 +01:00
.gitattributes Always checkout JavaScript files in Unix style 2019-02-12 17:13:27 +01:00
.gitignore Include ESM builds in the released package 2023-06-19 12:08:03 +02:00
.prettierrc.yaml update dependencies, and reformat code with eslint 9 2024-06-23 22:40:17 +02:00
.yarnrc.yml upgrade dependencies and yarn 2023-12-28 13:22:43 +01:00
biome.json migrate from mocha+chai+prettier+eslint to node-native testing tooling and biomejs (#417) 2024-12-23 22:34:37 +01:00
Contributors.md Setup tsup to support both CJS and ESM 2024-12-25 20:50:49 +01:00
LICENSE Update LICENSE 2023-05-30 09:52:24 +00:00
package.json 2.0.2 2025-04-02 16:20:34 +02:00
Readme.md Update Readme.md 2026-05-31 15:40:22 +02:00
tsconfig.json revert the current ESM setup 2024-12-25 20:15:27 +01:00
tsconfig.test.json Setup tsup to support both CJS and ESM 2024-12-25 20:50:49 +01:00
tsup.config.ts Setup tsup to support both CJS and ESM 2024-12-25 20:50:49 +01:00
yarn.lock Setup tsup to support both CJS and ESM 2024-12-25 20:50:49 +01:00

Tired maintainers doesn't want your slop

Archiving this repo, because I don't want to deal with the same LLM generated "security advisory" about an inifinite loop.
I do not wish to participate in this sloppy mess of a platform. Please do not create issues or advisories for me, and please do not summon me in your slop 🙏.

At some point I'll revive this project to address actual issues, but only after I migrate this project to Codeberg.

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)

v1.x of this library had a sync API, that internally used sync file reads.

This isn't recommended because this blocks the node.js main thread, which reduces the performance, and prevents this library from being used concurrently.

However if you still need to use this package syncronously, you can read the file syncronously into a buffer, and then pass the buffer to this library.

import { readFileSync } from 'node:fs'
import { imageSize } from 'image-size'

const buffer = readFileSync('photos/image.jpg')
const dimensions = imageSize(buffer)
console.log(dimensions.width, dimensions.height)

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))
    })
})

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