| Crates.io | little_exif |
| lib.rs | little_exif |
| version | 0.6.23 |
| created_at | 2022-10-07 23:53:24.435406+00 |
| updated_at | 2026-01-13 10:45:24.421817+00 |
| description | The only pure Rust crate with true read *and* write support for EXIF data, available for PNG, JP(E)G, HEIF/HEIC/HIF/AVIF, JXL, TIFF, WebP - and soon even more! |
| homepage | |
| repository | https://github.com/TechnikTobi/little_exif |
| max_upload_size | |
| id | 683200 |
| size | 400,020 |
A little library for reading and writing EXIF data in pure Rust.
Your required format is not listed here or you've run into a problem with a file that should be supported? Open up a new issue (ideally with an example image for reproduction in case of a problem) and I'll take a look!
If the image is stored in a file, located at some given path:
use little_exif::metadata::Metadata;
use little_exif::exif_tag::ExifTag;
let image_path = std::path::Path::new("image.png");
let mut metadata = Metadata::new_from_path(&image_path);
metadata.set_tag(
ExifTag::ImageDescription("Hello World!".to_string())
);
metadata.write_to_file(&image_path)?;
Alternatively, if the image is stored in a Vec<u8> variable:
use little_exif::metadata::Metadata;
use little_exif::exif_tag::ExifTag;
use little_exif::filetype::FileExtension;
let file_type = FileExtension::JPEG;
let mut metadata = Metadata::new_from_vec(&image_vector, file_type);
metadata.set_tag(
ExifTag::ImageDescription("Hello World!".to_string())
);
metadata.write_to_vec(&mut image_vector, file_type)?;
To run the tests from a specific file, use e.g.
cargo test --test issue_000002
To run a single test from that file use
cargo test --test issue_000002 read_and_write_exif_data_1
This library uses the log crate for various levels of logging.
To enable this logging, you will need to add & initialize a logger implementation, such as env_logger, but there are other loggers available, see the list on available logging implementations in the log crate.
Add the implementation to your crate:
cargo add env_logger
Initialize the logger in your application:
fn main()
{
env_logger::init();
// your little_exif code ...
}
In env_logger, you can view little_exif's debug-level logs, for example, by setting the RUST_LOG env var:
env RUST_LOG=debug cargo run
For other log levels, see env_logger's documentation or the documentation of the logger of your choice.
This could be due to the such called APP12 or APP13 segment stored in the JPEG, likely caused by editing the file using e.g. Photoshop. These segments may store data that image viewers also interpret as an ImageDescription, overriding the EXIF tag. Right now, little_exif can't edit these segments. As a workaround, the functions clear_app12_segment and clear_app13_segment can remove these areas from the JPEG:
// File in a Vec<u8>
Metadata::clear_app12_segment(&mut file_content, file_extension)?;
Metadata::clear_app13_segment(&mut file_content, file_extension)?;
// File at a given path
Metadata::file_clear_app12_segment(&given_path)?;
Metadata::file_clear_app13_segment(&given_path)?;
Licensed under either
at your option.