#image #dimension #size #file-format #metadata #reading-file #file-metadata

imagesize

Quick probing of image dimensions without loading the entire file

32 releases

0.13.0 Jun 18, 2024
0.12.0 May 11, 2023
0.11.0 Jan 6, 2023
0.10.1 Sep 24, 2022
0.3.5 May 17, 2017

#16 in Images

Download history 50839/week @ 2024-07-21 44040/week @ 2024-07-28 48666/week @ 2024-08-04 46067/week @ 2024-08-11 48491/week @ 2024-08-18 49483/week @ 2024-08-25 55857/week @ 2024-09-01 52694/week @ 2024-09-08 53116/week @ 2024-09-15 59959/week @ 2024-09-22 56756/week @ 2024-09-29 59184/week @ 2024-10-06 57128/week @ 2024-10-13 64578/week @ 2024-10-20 64473/week @ 2024-10-27 64337/week @ 2024-11-03

254,197 downloads per month
Used in 274 crates (22 directly)

MIT license

58KB
1K SLoC

crates.io version docs-badge

imagesize

Quickly probe the size of various image formats without reading the entire file.

The goal of this crate is to be able to read the dimensions of a supported image without loading unnecessary data, and without pulling in more dependencies. Most reads only require 16 bytes or less, and more complex formats take advantage of skipping junk data.

Usage

Add the following to your Cargo.toml:

[dependencies]
imagesize = "0.13"

Supported Image Formats

  • Aseprite
  • Avif
  • BMP
  • DDS
  • EXR
  • Farbfeld
  • GIF
  • HDR
  • HEIC / HEIF
  • ICO*
  • ILBM (IFF)
  • JPEG
  • JPEG XL
  • KTX2
  • PNG
  • PNM (PBM, PGM, PPM)
  • PSD / PSB
  • QOI
  • TGA
  • TIFF
  • VTF
  • WEBP

If you have a format you think should be added, feel free to create an issue.

*ICO files can contain multiple images, imagesize will give the dimensions of the largest one.

Examples

From a file

match imagesize::size("example.webp") {
    Ok(size) => println!("Image dimensions: {}x{}", size.width, size.height),
    Err(why) => println!("Error getting dimensions: {:?}", why)
}

From a vector

let data = vec![0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x64, 0x00, 0x64, 0x00];
match imagesize::blob_size(&data) {
    Ok(size) => println!("Image dimensions: {}x{}", size.width, size.height),
    Err(why) => println!("Error getting dimensions: {:?}", why),
}

No runtime deps