3 releases (breaking)

0.3.0 Jan 9, 2024
0.2.0 Jan 6, 2021
0.1.0 Nov 5, 2020

#161 in Images

Download history 11948/week @ 2025-09-12 12322/week @ 2025-09-19 12627/week @ 2025-09-26 11622/week @ 2025-10-03 13507/week @ 2025-10-10 12226/week @ 2025-10-17 15193/week @ 2025-10-24 14799/week @ 2025-10-31 13464/week @ 2025-11-07 12585/week @ 2025-11-14 14096/week @ 2025-11-21 18658/week @ 2025-11-28 22927/week @ 2025-12-05 21933/week @ 2025-12-12 15082/week @ 2025-12-19 11106/week @ 2025-12-26

75,297 downloads per month
Used in 104 crates (via typst-library)

MIT license

275KB
6K SLoC

qcms

Crates.io Documentation

Firefox's library for transforming image data between ICC profiles.

Example

    // Decode the jpeg
    let mut d = jpeg_decoder::Decoder::new(std::fs::File::open("/Users/jrmuizel/Desktop/DSCF2460.jpg").unwrap());
    let mut data = d.decode().unwrap();
    let info = d.info().unwrap();

    // Extract the profile after decode
    let profile = d.icc_profile().unwrap();

    // Create a new qcms Profile
    let input = qcms::Profile::new_from_slice(&profile).unwrap();
    let mut output = qcms::Profile::new_sRGB();
    output.precache_output_transform();

    // Create a transform between input and output profiles and apply it.
    let xfm = qcms::Transform::new(&input, &output, qcms::DataType::RGB8, qcms::Intent::default()).unwrap();
    xfm.apply(&mut data);

    // write the result to a PNG
    let mut encoder = png::Encoder::new(std::fs::File::create("out.png").unwrap(), info.width as u32, info.height as u32);
    encoder.set_color(png::ColorType::Rgb);
    encoder.set_srgb(png::SrgbRenderingIntent::Perceptual);
    let mut writer = encoder.write_header().unwrap();
    writer.write_image_data(&data).unwrap(); // Save

This library was originally written in C, was converted to Rust using c2rust, and then refactored to be mostly safe and more idiomatic Rust.

Dependencies