【Python】Exif情報の確認・編集可能なpyexiv2のインストール

【Python】Exif情報の確認・編集可能なpyexiv2のインストール プログラミング

「写真のExif情報を確認したい」
「Exif情報をPythonで編集したい」

このような場合には、pyexiv2がオススメです。
この記事では、Exif情報の確認・編集ができるpyexiv2について解説しています。

本記事の内容

  • pyexiv2とは?
  • pyexiv2のシステム要件
  • pyexiv2のインストール
  • pyexiv2の動作確認

それでは、上記に沿って解説していきます。

pyexiv2とは?

pyexiv2とは、デジタル画像に埋め込まれたメタデータの読み書きが可能なPythonライブラリです。
デジタル画像の種類には、次の3つがあります。

  • EXIF
  • IPTC
  • XMP

この記事では、Exifに絞って説明を行います。
Exifの読み取りだけであれば、次のライブラリで十分です。

しかし、上記ライブラリではExifの編集ができません。
よって、Exifの読み書き両方を処理するにはpyexiv2が必要となります。

以上、pyexiv2について説明しました。
次は、pyexiv2のシステム要件を説明します。

pyexiv2のシステム要件

現時点(2022年9月)でのpyexiv2の最新バージョンは、2.8.0となります。
この最新バージョンは、2022年8月19日にリリースされています。

サポートOSに関しては、以下を含むクロスプラットフォーム対応です。

  • Windows
  • macOS
  • Linux(64bit)

サポート対象となるPythonのバージョンは、Python 3.5以降となります。
現状のPython公式開発サイクルは、以下。

バージョンリリース日サポート期限
3.62016年12月23日2021年12月23日
3.72018年6月27日2023年6月27日
3.82019年10月14日2024年10月
3.92020年10月5日2025年10月
3.102021年10月4日2026年10月

基本的には、上記開発サイクルに従った方が無難です。
よって、Python 3.7以降の利用を推奨しておきます。

あと、pyexiv2はExiv2のC++API経由でExifを操作します。
この関係上、ビルドする環境が必要かと考えてしまいます。

しかし、インストール時にビルドなどはしていません。
ビルドはせずに、必要なバイナリファイルをダウンロードしています。

Windowsの場合

Linuxの場合

pyexiv2のGitHubを見ると、OS・Python毎にバイナリが用意されていることを確認できます。

したがって、pyexiv2のシステム要件は非常にシンプルなモノだと言えます。

以上、pyexiv2のシステム要件を説明しました。
次は、pyexiv2のインストールを説明します。

pyexiv2のインストール

検証は、次のバージョンのPythonで行います。

$ python -V
Python 3.10.2

まずは、現状のインストール済みパッケージを確認しておきます。

$ pip list
Package    Version
---------- -------
pip        22.2.2
setuptools 65.3.0
wheel      0.36.2

次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。

python -m pip install --upgrade pip setuptools

では、pyexiv2のインストールです。
pyexiv2のインストールは、以下のコマンドとなります。

pip install pyexiv2

pyexiv2のインストールは、一瞬で終わります。
終了したら、どんなパッケージがインストールされたのかを確認します。

$ pip list
Package    Version
---------- -------
pip        22.2.2
pyexiv2    2.8.0
setuptools 65.3.0
wheel      0.36.2

pyexiv2が依存するパッケージは、ありません。
その意味では、既存の環境にも容易に導入できそうです。

以上、pyexiv2のインストールを説明しました。
次は、pyexiv2の動作確認を説明します。

pyexiv2の動作確認

pyexiv2の動作確認を行います。
削除もありますが、今回は以下の動作を確認します。

  • Exifの読み込み
  • Exifの編集

動作確認を行う前に、Exif情報のある画像を用意しましょう。
ネットで探すよりは、自分で用意した方が確実に早いです。

それぞれを以下で説明します。

Exifの読み込み

Exifの読み込みは、以下のコードで行います。
「test.jpg」は、スマホで撮影した画像です。

import pyexiv2
import pprint

IMG_PATH = "test.jpg"

with pyexiv2.Image(IMG_PATH) as img:
    data = img.read_exif()
    print(type(data))
    pprint.pprint(data)

with構文を使うと、close()を記述する手間を省くことができます。
with構文については、次の記事で解説しています。

上記コードを実行すると、次のような結果が表示されます。

<class 'dict'>
{'Exif.Image.DateTime': '2022:09:03 09:31:49',
 'Exif.Image.ExifTag': '243',
 'Exif.Image.GPSTag': '978',
 'Exif.Image.ImageLength': '3024',
 'Exif.Image.ImageWidth': '4032',
 'Exif.Image.Make': 'Google',
 'Exif.Image.Model': 'Pixel 4a',
〜省略〜
 'Exif.Thumbnail.Compression': '6',
 'Exif.Thumbnail.ImageLength': '378',
 'Exif.Thumbnail.ImageWidth': '504',
 'Exif.Thumbnail.JPEGInterchangeFormat': '1333',
 'Exif.Thumbnail.JPEGInterchangeFormatLength': '30402',
 'Exif.Thumbnail.Orientation': '1',
 'Exif.Thumbnail.ResolutionUnit': '2',
 'Exif.Thumbnail.XResolution': '72/1',
 'Exif.Thumbnail.YResolution': '72/1'}

戻り値となるデータは、辞書型「dict」になります。
Exif情報は、撮影デバイスやその設定により異なります。

なお、GPS関連の情報は除去しています。
GPS情報から、住所が判明することがありますからね。
Exif情報を公開する場合は、注意してください。

Exifの編集

Exifの編集は、項目(キー)の追加も含みます。
Exifの情報を変更するコードは、以下。

import pyexiv2

IMG_PATH = "test.jpg"

with pyexiv2.Image(IMG_PATH) as img:
    img.modify_exif({'Exif.Image.Model': 'Pixel 6a'})

変更したいタグを指定して、値を設定します。
上記を実行して、エラーが出なければOKです。

確認のために、再度読み込みのコードを実行してみましょう。

〜省略〜
 'Exif.Image.Make': 'Google',
 'Exif.Image.Model': 'Pixel 6a',
 'Exif.Image.Orientation': '1',
〜省略〜

「Pixel 4a」から「Pixel 6a」に変更できました。
ただ、Exifが全部表示されると見づらいです。

読み込み用コードを次のように変更すると、変更したタグの値のみを確認できます。

    # pprint.pprint(data)
    print(data['Exif.Image.Model'])

コードを変更して、実行した結果は以下。

<class 'dict'>
Pixel 6a

これで、見やすくなりました。

ここまでより、Exifの編集が簡単にできることがわかったはずです。
ただ、追加に関しては注意が必要になります。

with pyexiv2.Image(IMG_PATH) as img:
    img.modify_exif({'Exif.Image.Mytag': 'original tag'})

上記を実行した場合、次のようなエラーが表示されます。

RuntimeError: Invalid tag name or ifdId `Mytag', ifdId 1

予め定められたタグ以外を登録できないということです。
標準タグであれば、追加も可能になります。

その標準タグ一覧は、情報が整理されて公開はされていないようです。
あったとしても、Googleで検索が難しい状態と言えます。

Exif 2.3 タグ
https://www.vieas.com/exif23.html

上記ページが、情報としては最も充実して整理されているように感じます。
実際、そんなに需要がないのでしょうかね・・・

以上、pyexiv2の動作確認を説明しました。

タイトルとURLをコピーしました