質問編集履歴

2 質問の1つ目を自己解決した

per_

per_ score 31

2020/07/20 10:48  投稿

Python piexifを使って画像のタグ情報を編集したい
### 前提・実現したいこと
PythonプログラムからJPGの"タグ"を取得および編集したいと考えています。
Windows10
Pythonバージョン3.7
![イメージ説明](ab2b271f9f21f1f9750bd991f93b3c4c.jpeg)
### できていること・わかっていること
調べているうち、Pillow(PIL)ライブラリではEXIF情報の取得しかできないと知りました。
そこで、取得および編集も可能であるpiexifライブラリも使用することを考えています。
上記2つのライブラリを用いて以下のことはできました。
・手動で設定してあるタグを取得する
・EXIFにおける、プロパティのタグ部分の情報
 id:40094
 tag名:XPKeyword
### 該当のソースコード
```python
import pprint
from PIL import Image
import piexif
filename = r"画像の絶対パス/nekohoge.jpg"
im = Image.open(filename)
exif = im._getexif()
for tag_id, value in exif.items():
   if tag_id == 40094:
       strv = str(value)
       print(strv.replace('\\x00', ''))
       # >>>b'cat;test;cute'
exif_dict = piexif.load(im.info["exif"])
pprint.pprint(exif_dict)
# >>> {'0th': {270: b'neko_hoge',
#             34665: 2144,
#             40091: (110,0,101,0,107,0,111,0,95,0,104,0,111,0,103,0,101,0,0,0),
#             40094: (99,0,97,0,116,0,59,0,116,0,101,0,115,0,116,0,59,0,99,0,117,0,116,0,101,0,0,0)},
#    '1st': {},
#    'Exif': {},
#    'GPS': {},
#    'Interop': {},
#    'thumbnail': None}
```
※一部見やすいように表記を整えています。
### わからないこと
0. piexifを用いて取得したこの情報がタグにあたる部分だと思うのですが、
`40094: (99,0,97,0,116,0,59,0,116,0,101,0,115,0,116,0,59,0,99,0,117,0,116,0,101,0,0,0)`
PILを用いて得た情報と表示形式が大きく異なるため、どういう表示をしているのかがわかりません。
PILを用いて得た情報と表示形式が大きく異なるため、~~どういう表示をしているのかがわかりません。~~
 ⇒自己解決しました。
各要素の数字において、`0`は処理を飛ばし、他の数値を`chr(数値)`で表示することで`cat;test;cute`を取得できました。
 
0. 公式ドキュメントでは決まったid部分を変更することは可能なようですが、
上記のような画像タグ(id:40094)部分を、指定して変更するやり方が分かりませんでした。
そもそも不可能なのでしょうか?
0. **公式ドキュメントでは決まったid部分を変更することは可能なようですが、**
**上記のような画像タグ(id:40094)部分を、指定して変更するやり方が分かりませんでした。**
**そもそも不可能なのでしょうか?**
  • Python

    25838 questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Python 3.x

    16397 questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • exif

    5 questions

1 注釈の追加

per_

per_ score 31

2020/07/20 10:03  投稿

Python piexifを使って画像のタグ情報を編集したい
### 前提・実現したいこと
PythonプログラムからJPGの"タグ"を取得および編集したいと考えています。
Windows10
Pythonバージョン3.7
![イメージ説明](ab2b271f9f21f1f9750bd991f93b3c4c.jpeg)
### できていること・わかっていること
調べているうち、Pillow(PIL)ライブラリではEXIF情報の取得しかできないと知りました。
そこで、取得および編集も可能であるpiexifライブラリも使用することを考えています。
上記2つのライブラリを用いて以下のことはできました。
・手動で設定してあるタグを取得する
・EXIFにおける、プロパティのタグ部分の情報
 id:40094
 tag名:XPKeyword
### 該当のソースコード
```python
import pprint
from PIL import Image
import piexif
filename = r"画像の絶対パス/nekohoge.jpg"
im = Image.open(filename)
exif = im._getexif()
for tag_id, value in exif.items():
   if tag_id == 40094:
       strv = str(value)
       print(strv.replace('\\x00', ''))
       # >>>b'cat;test;cute'
exif_dict = piexif.load(im.info["exif"])
pprint.pprint(exif_dict)
# >>> {'0th': {270: b'neko_hoge',
#             34665: 2144,
#             40091: (110,0,101,0,107,0,111,0,95,0,104,0,111,0,103,0,101,0,0,0),
#             40094: (99,0,97,0,116,0,59,0,116,0,101,0,115,0,116,0,59,0,99,0,117,0,116,0,101,0,0,0)},
#    '1st': {},
#    'Exif': {},
#    'GPS': {},
#    'Interop': {},
#    'thumbnail': None}
```
※一部見やすいように表記を整えています。  
### わからないこと
0. piexifを用いて取得したこの情報がタグにあたる部分だと思うのですが、
`40094: (99,0,97,0,116,0,59,0,116,0,101,0,115,0,116,0,59,0,99,0,117,0,116,0,101,0,0,0)`
PILを用いて得た情報と表示形式が大きく異なるため、どういう表示をしているのかがわかりません。
 
0. 公式ドキュメントでは決まったid部分を変更することは可能なようですが、
上記のような画像タグ(id:40094)部分を、指定して変更するやり方が分かりませんでした。
そもそも不可能なのでしょうか?
  • Python

    25838 questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Python 3.x

    16397 questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • exif

    5 questions

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る