load_image 3.4.1

Load PNG or JPEG with color profile support
Documentation

Load image as sRGB

Glue code for a few libraries that correctly loads a JPEG, PNG, or (optionally) WebP or AVIF image into memory, taking into account color profile metadata in PNG chunks, EXIF data and app markers. Converts CMYK to RGB if needed.

cargo add load_image
fn main() -> Result<(), Box<dyn std::error::Error>> {
    let path = std::env::args().nth(1).ok_or("Please provide image file path")?;
    let img = load_image::load_path(path)?;
    println!("{}x{}", img.width, img.height);
    Ok(())
}

The returned Image is:

# use load_image::export::rgb::*;
struct Image {
    pub width: usize,
    pub height: usize,
    pub bitmap: ImageData,
}

enum ImageData {
    RGB8(Vec<RGB8>),
    RGBA8(Vec<RGBA8>),
    RGB16(Vec<RGB16>),
    RGBA16(Vec<RGBA16>),
    GRAY8(Vec<GRAY8>),
    GRAY16(Vec<GRAY16>),
    GRAYA8(Vec<GRAYA8>),
    GRAYA16(Vec<GRAYA16>),
}

The bitmap is packed, so x + y * width gives the pixel at x,y (use imgref for convenient manipulation).

The load_image function doesn't panic, but if you enable the mozjpeg feature, it will depend on unwinding internally, and won't be compatible with crates compiled with panic = "abort" option.