nom-exif 1.2.0

Exif/metadata parsing library written in pure Rust, both JPEG/HEIF/HEIC images and MOV/MP4 videos are supported.
Documentation
# Nom-Exif

[![crates.io](https://img.shields.io/crates/v/nom-exif.svg)](https://crates.io/crates/nom-exif)
[![Documentation](https://docs.rs/nom-exif/badge.svg)](https://docs.rs/nom-exif)
[![LICENSE](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
[![CI](https://github.com/mindeng/nom-exif/actions/workflows/rust.yml/badge.svg)](https://github.com/mindeng/nom-exif/actions)

Exif/metadata parsing library written in pure Rust with [nom](https://github.com/rust-bakery/nom).

## Supported File Types

-   Images
    -   JPEG
    -   HEIF/HEIC
-   Videos
    -   MOV
    -   MP4

## Features

-   **Zero-copy when appropriate:** Use borrowing and slicing instead of copying
    whenever possible.
-   **Minimize I/O operations:** When metadata is stored at the end/middle of a
    large file (such as a MOV/HEIC file does), `Seek` rather than `Read` to
    quickly locate the location of the metadata.
-   **Pay as you go:** When extracting Exif data, only the information
    corresponding to the specified Exif tags are parsed to reduce the overhead
    when processing a large number of files.

## Usage

- Images
    - [`parse_heif_exif`]https://docs.rs/nom-exif/latest/nom_exif/fn.parse_heif_exif.html
    - [`parse_jpeg_exif`]https://docs.rs/nom-exif/latest/nom_exif/fn.parse_jpeg_exif.html
- Videos
    - [`parse_metadata`]https://docs.rs/nom-exif/latest/nom_exif/fn.parse_metadata.html
- [examples]examples/

## CLI Tool `rexiftool`

### Normal output

`cargo run --example rexiftool testdata/meta.mov`:

``` text
com.apple.quicktime.make                => Apple
com.apple.quicktime.model               => iPhone X
com.apple.quicktime.software            => 12.1.2
com.apple.quicktime.location.ISO6709    => +27.1281+100.2508+000.000/
com.apple.quicktime.creationdate        => 2019-02-12T15:27:12+08:00
duration                                => 500
width                                   => 720
height                                  => 1280
```

### Json dump

`cargo run --features json_dump --example rexiftool -- -j testdata/meta.mov`:

``` text
{
  "height": "1280",
  "duration": "500",
  "width": "720",
  "com.apple.quicktime.creationdate": "2019-02-12T15:27:12+08:00",
  "com.apple.quicktime.make": "Apple",
  "com.apple.quicktime.model": "iPhone X",
  "com.apple.quicktime.software": "12.1.2",
  "com.apple.quicktime.location.ISO6709": "+27.1281+100.2508+000.000/"
}
```