8 releases
new 0.3.1 | Oct 26, 2024 |
---|---|
0.3.0 | Aug 11, 2022 |
0.2.3 | Oct 14, 2020 |
0.2.2 | Sep 17, 2020 |
0.1.0 | Apr 1, 2020 |
#321 in Images
116,229 downloads per month
Used in 15 crates
(10 directly)
67KB
1.5K
SLoC
img-parts
The img-parts
crate provides a low level API for reading and
writing containers from various image formats, and a high level
API for reading and writing raw ICC profiles and EXIF metadata.
It currently supports Jpeg
, Png
and RIFF
(with some helper
functions for WebP
).
More examples can be found in the examples
directory on GitHub.
Reading and writing raw ICCP and EXIF metadata
use std::fs::{self, File};
use img_parts::jpeg::Jpeg;
use img_parts::{ImageEXIF, ImageICC};
let input = fs::read("img.jpg")?;
let output = File::create("out.jpg")?;
let mut jpeg = Jpeg::from_bytes(input.into())?;
let icc_profile = jpeg.icc_profile();
let exif_metadata = jpeg.exif();
jpeg.set_icc_profile(Some(another_icc_profile.into()));
jpeg.set_exif(Some(new_exif_metadata.into()));
jpeg.encoder().write_to(output)?;
Modifying chunks
use std::fs::{self, File};
use img_parts::jpeg::{markers, Jpeg, JpegSegment};
use img_parts::Bytes;
let input = fs::read("img.jpg")?;
let output = File::create("out.jpg")?;
let mut jpeg = Jpeg::from_bytes(input.into())?;
let comment = Bytes::from("Hello, I'm writing a comment!");
let comment_segment = JpegSegment::new_with_contents(markers::COM, comment);
jpeg.segments_mut().insert(1, comment_segment);
jpeg.encoder().write_to(output)?;
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or https://opensource.org/license/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you shall be dual licensed as above, without any additional terms or conditions.
Dependencies
~425KB