Crate exif[][src]

This is a pure-Rust library to parse Exif data.

This library parses Exif attributes in a raw Exif data block. It can also read Exif data directly from some image formats including TIFF, JPEG, HEIF, PNG, and WebP.

Examples

To parse Exif attributes in an image file, use Reader::read_from_container. To convert a field value to a string, use Field::display_value.

for path in &["tests/exif.jpg", "tests/exif.tif"] {
    let file = std::fs::File::open(path)?;
    let mut bufreader = std::io::BufReader::new(&file);
    let exifreader = exif::Reader::new();
    let exif = exifreader.read_from_container(&mut bufreader)?;
    for f in exif.fields() {
        println!("{} {} {}",
                 f.tag, f.ifd_num, f.display_value().with_unit(&exif));
    }
}

To process a field value programmatically in your application, use the value itself (associated value of enum Value) rather than a stringified one.

// Orientation is stored as a SHORT.  You could match `orientation.value`
// against `Value::Short`, but the standard recommends that readers
// should accept BYTE, SHORT, or LONG values for any unsigned integer
// field.  `Value::get_uint` is provided for that purpose.
match exif.get_field(Tag::Orientation, In::PRIMARY) {
    Some(orientation) =>
        match orientation.value.get_uint(0) {
            Some(v @ 1..=8) => println!("Orientation {}", v),
            _ => eprintln!("Orientation value is broken"),
        },
    None => eprintln!("Orientation tag is missing"),
}
// XResolution is stored as a RATIONAL.
match exif.get_field(Tag::XResolution, In::PRIMARY) {
    Some(xres) =>
        match xres.value {
            Value::Rational(ref v) if !v.is_empty() =>
                println!("XResolution {}", v[0]),
            _ => eprintln!("XResolution value is broken"),
        },
    None => eprintln!("XResolution tag is missing"),
}

Upgrade Guide

See the upgrade guide for API incompatibilities.

Modules

doc

Documentation

experimental

The interfaces in this module are experimental and unstable.

Structs

DateTime

A struct used to parse a DateTime field.

Exif

A struct that holds the parsed Exif attributes.

Field

A TIFF/Exif field.

In

An IFD number.

Rational

An unsigned rational number, which is a pair of 32-bit unsigned integers.

Reader

A struct to parse the Exif attributes and create an Exif instance that holds the results.

SRational

A signed rational number, which is a pair of 32-bit signed integers.

Tag

A tag of a TIFF/Exif field.

Enums

Context

An enum that indicates how a tag number is interpreted.

Error

An error returned when parsing of Exif data fails.

Value

A type and values of a TIFF/Exif field.

Functions

get_exif_attr_from_jpeg

Get the Exif attribute information segment from a JPEG file.

parse_exif

Parse the Exif attributes in the TIFF format.