pub struct Exif { /* private fields */ }
Expand description
A struct that holds the parsed Exif attributes.
§Examples
// Get a specific field.
let xres = exif.get_field(Tag::XResolution, In::PRIMARY)?;
assert_eq!(xres.display_value().with_unit(&exif).to_string(),
"72 pixels per inch");
// Iterate over all fields.
for f in exif.fields() {
println!("{} {} {}", f.tag, f.ifd_num, f.display_value());
}
Implementations§
Source§impl Exif
impl Exif
Sourcepub fn fields(&self) -> impl ExactSizeIterator<Item = &Field>
pub fn fields(&self) -> impl ExactSizeIterator<Item = &Field>
Returns an iterator of Exif fields.
Examples found in repository?
examples/dumpexif.rs (line 59)
42fn dump_file(path: &Path) -> Result<(), exif::Error> {
43 let file = File::open(path)?;
44
45 // To parse strictly:
46 // let exif = exif::Reader::new()
47 // .read_from_container(&mut BufReader::new(&file))?;
48
49 // To parse with continue-on-error mode:
50 let exif = exif::Reader::new()
51 .continue_on_error(true)
52 .read_from_container(&mut BufReader::new(&file))
53 .or_else(|e| e.distill_partial_result(|errors| {
54 eprintln!("{}: {} warning(s)", path.display(), errors.len());
55 errors.iter().for_each(|e| eprintln!(" {}", e));
56 }))?;
57
58 println!("{}", path.display());
59 for f in exif.fields() {
60 println!(" {}/{}: {}",
61 f.ifd_num.index(), f.tag,
62 f.display_value().with_unit(&exif));
63 println!(" {:?}", f.value);
64 }
65 Ok(())
66}
Sourcepub fn little_endian(&self) -> bool
pub fn little_endian(&self) -> bool
Returns true if the Exif data (TIFF structure) is in the little-endian byte order.
Sourcepub fn get_field(&self, tag: Tag, ifd_num: In) -> Option<&Field>
pub fn get_field(&self, tag: Tag, ifd_num: In) -> Option<&Field>
Returns a reference to the Exif field specified by the tag and the IFD number.
Examples found in repository?
examples/reading.rs (line 48)
34fn main() {
35 let file = File::open("tests/exif.jpg").unwrap();
36 let exif = Reader::new().read_from_container(
37 &mut BufReader::new(&file)).unwrap();
38
39 // To obtain a string representation, `Value::display_as`
40 // or `Field::display_value` can be used. To display a value with its
41 // unit, call `with_unit` on the return value of `Field::display_value`.
42 let tag_list = [Tag::ExifVersion,
43 Tag::PixelXDimension,
44 Tag::XResolution,
45 Tag::ImageDescription,
46 Tag::DateTime];
47 for tag in tag_list {
48 if let Some(field) = exif.get_field(tag, In::PRIMARY) {
49 println!("{}: {}",
50 field.tag, field.display_value().with_unit(&exif));
51 }
52 }
53
54 // To get unsigned integer value(s) from either of BYTE, SHORT,
55 // or LONG, `Value::get_uint` or `Value::iter_uint` can be used.
56 if let Some(field) = exif.get_field(Tag::PixelXDimension, In::PRIMARY) {
57 if let Some(width) = field.value.get_uint(0) {
58 println!("Valid width of the image is {}.", width);
59 }
60 }
61
62 // To convert a Rational or SRational to an f64, `Rational::to_f64`
63 // or `SRational::to_f64` can be used.
64 if let Some(field) = exif.get_field(Tag::XResolution, In::PRIMARY) {
65 match field.value {
66 Value::Rational(ref vec) if !vec.is_empty() =>
67 println!("X resolution is {}.", vec[0].to_f64()),
68 _ => {},
69 }
70 }
71
72 // To parse a DateTime-like field, `DateTime::from_ascii` can be used.
73 if let Some(field) = exif.get_field(Tag::DateTime, In::PRIMARY) {
74 match field.value {
75 Value::Ascii(ref vec) if !vec.is_empty() => {
76 if let Ok(datetime) = DateTime::from_ascii(&vec[0]) {
77 println!("Year of DateTime is {}.", datetime.year);
78 }
79 },
80 _ => {},
81 }
82 }
83}
Auto Trait Implementations§
impl Freeze for Exif
impl !RefUnwindSafe for Exif
impl Send for Exif
impl !Sync for Exif
impl Unpin for Exif
impl UnwindSafe for Exif
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more