Symfoware

Symfowareについての考察blog

Python バイナリデータにしたjpgのexif情報を取得する(PIL使用)

Pythonでjpgのexif情報(撮影日付)を取得する方法メモ。


Pillow(PIL)のインストール



OSはUbuntuです。
apt-getでPillow(PIL)をインストールしました。


$ sudo apt-get install python-imaging






jpgファイルのexif情報取得



jpgファイルのexif情報を取得。
撮影日付(DateTime,DateTimeOriginal)を取得するサンプルはこんな感じになります。


  1. from PIL import Image
  2. from PIL.ExifTags import TAGS
  3. im = Image.open('portrait-org.jpg')
  4. exif = im._getexif()
  5. exif_table = {}
  6. for tag_id, value in exif.items():
  7.     tag = TAGS.get(tag_id, tag_id)
  8.     exif_table[tag] = value
  9. print exif_table['DateTime']
  10. print exif_table['DateTimeOriginal']




実行すると、文字列な日付が取得出来ました。


$ python exif.py
2012:11:18 14:12:27
2012:11:18 14:12:27






バイナリデータにしたjpgのexif情報取得



データベースにバイナリデータとしてjpg画像を登録しているとします。
一旦tempfileに出力すれば上記の方法でexif情報を読み出すことができますが、
できればメモリー内で完結したい。

StringIOでラップしてやれば実現できました。


  1. # -*- coding : utf-8 -*-
  2. import cStringIO
  3. from PIL import Image
  4. from PIL.ExifTags import TAGS
  5. # 本当はデータベースから取得したバイナリデータ
  6. imf = cStringIO.StringIO()
  7. with open('portrait-org.jpg', 'rb') as f:
  8.     imf.write(f.read())
  9. # seekでポインタを先頭に戻す
  10. imf.seek(0)
  11. # ファイル名ではなく、StringIOオブジェクトを渡す
  12. # im = Image.open('portrait-org.jpg')
  13. im = Image.open(imf)
  14. exif = im._getexif()
  15. exif_table = {}
  16. for tag_id, value in exif.items():
  17.     tag = TAGS.get(tag_id, tag_id)
  18.     exif_table[tag] = value
  19. print exif_table['DateTime']
  20. print exif_table['DateTimeOriginal']





ライブラリの実装が上手だと、色々な使い方ができて便利です。



【参考URL】

Python Tips:画像の Exif データを取得したい

pythonのPILを使ってExifを見る

In Python, how do I read the exif data for an image?


関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2015/11/07(土) 14:49:21|
  2. Python
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<Python データベースコネクションをプーリング(SQLAlchemy使用) | ホーム | PHP 文字列操作関数まとめ (文字数のカウント、分割、結合等)>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1815-4dabadc7
この記事にトラックバックする(FC2ブログユーザー)