Metadata-Version: 2.1
Name: pyexiv2
Version: 1.2.2
Summary: Read and modify metadata of digital image, including EXIF, IPTC, XMP.
Home-page: https://github.com/LeoHsiao1/pyexiv2
Author: LeoHsiao
Author-email: leohsiao@foxmail.com
License: UNKNOWN
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
Description-Content-Type: text/markdown

# pyexiv2

Read and modify metadata of digital image, including EXIF, IPTC, XMP.

- install: `pip install pyexiv2`
- [source code on github](https://github.com/LeoHsiao1/pyexiv2)

## Features

- Runs on C++ API of [exiv2](https://www.exiv2.org/index.html).
- Supports running on Linux 64bit.
- Supports running on Windows 64bit, with Python3(64bit).
- [Supports various metadata](https://www.exiv2.org/metadata.html)
- [Supports various image formats](https://dev.exiv2.org/projects/exiv2/wiki/Supported_image_formats)
- Supports Unicode characters that contained in image paths and data.
- Not thread-safe, because some global variables have been used.

## Usage

- read metadata :

    ```python
    >>> from pyexiv2 import Image

    >>> i = Image("tests/1.jpg")
    >>> i.read_exif()
    {'Exif.Image.DateTime': '2019:06:23 19:45:17', 'Exif.Image.Artist': 'TEST', 'Exif.Image.Rating': '4', ...}
    >>> i.read_iptc()
    {'Iptc.Envelope.CharacterSet': '\x1b%G', 'Iptc.Application2.ObjectName': 'TEST', 'Iptc.Application2.Keywords': 'TEST', ...}
    >>> i.read_xmp()
    {'Xmp.dc.format': 'image/jpeg', 'Xmp.dc.rights': 'lang="x-default" TEST', 'Xmp.dc.subject': 'TEST', ...}
    ```

- modify metadata :

    ```python
    >>> # prepare the XMP data you want to modify
    >>> _dict = {"Xmp.xmp.CreateDate": "2019-06-23T19:45:17.834",   # this will overwrite its original value, or add it if it doesn't exist
    ...          "Xmp.xmp.Rating": ""}  # set an empty str explicitly to delete the datum
    }

    >>> i.modify_xmp(_dict)
    >>> xmp_dict = i.read_xmp()         # read it again
    >>> xmp_dict["Xmp.xmp.CreateDate"]
    '2019-06-23T19:45:17.834'           # it has been set
    >>> xmp_dict["Xmp.xmp.Rating"]
    KeyError: 'Xmp.xmp.Rating'          # it has been deleted

    # use i.modify_exif() and i.modify_iptc() in the same way
    ```

- In short, please call the public methods of class `pyexiv2.Image` :

    ```python
    i = Image("tests/1.jpg")
    i.read_exif()
    i.read_iptc()
    i.read_xmp()
    i.read_all()
    i.modify_exif({"Exif.Image.ImageDescription": "test",...})
    i.modify_iptc({"Iptc.Application2.ObjectName": "test",...})
    i.modify_xmp({"Xmp.xmp.CreateDate": "2019-06-23T19:45:17.834",...})
    i.modify_all({"EXIF":{...}, "IPTC":{...}, "XMP":{...}})
    i.clear_exif()
    i.clear_iptc()
    i.clear_xmp()
    i.clear_all()
    ```

## Tests

There are some test cases in folder "pyexiv2/tests". Run them by pytest:

```shell
pip install pytest psutil
pytest -v
```


