blog.tmp.tokyo

No Promises Await at Journey's End

Pythonista3で写真のExif情報を取得する

Deep LearningをPythonista3だけでやろうとしてうまく行ってないのは相変わらずなのですが。

tomohiko37-i.hatenablog.jp

一旦、アプリを削除して入れ直して見たり試行錯誤していたら以前書いたスクリプトが消えてることに気づきました。バックアップしてないんで当たり前ですが。

記憶を元に再度書きました。

# coding: UTF-8

from PIL.ExifTags import TAGS
import appex

# 画像のExif情報を全て取得する
img = appex.get_image()
exif_info = img._getexif()
exif_table = {}
for tag_id, value in exif_info.items():
  tag = TAGS.get(tag_id)
  exif_table[tag] = value

# 取得したExif情報から必要な情報だけを表示する

# F 値
if 'FNumber' in exif_table:
  f_num = exif_table['FNumber']
  f_num_bunshi = f_num[0]
  f_num_bunbo  = f_num[1]
  print("F値:", f_num_bunshi / f_num_bunbo)

# シャッタースピード
if 'ExposureTime' in exif_table:
  shutter_speed = exif_table['ExposureTime']
  print("シャッタースピード:", shutter_speed[0], "/", shutter_speed[1], "秒")

# ISO
if 'ISOSpeedRatings' in exif_table:
  iso = exif_table['ISOSpeedRatings']
  print("ISO:", iso)

# 焦点距離
if 'FocalLength' in exif_table:
  focal_length = exif_table['FocalLength']
  print('焦点距離:', focal_length[0] / focal_length[1], 'mm')

# 撮影日時
if 'DateTimeOriginal' in exif_table:
  date = exif_table['DateTimeOriginal']
  print("撮影日時:", date)

# カメラ
if 'Model' in exif_table:
  camera_model = exif_table['Model']
  print("カメラ:", camera_model)

# レンズ
if 'LensModel' in exif_table:
  lens_model = exif_table['LensModel']
  print("レンズ:", lens_model)

自分で撮影した写真にしか使わないので、あまり例外処理は考えていなかったのですが、ネットで拾ってきた画像とかに使うとExif情報が取れずにコケるので最低限のチェックだけはしておきました。

Pythonista3をお持ちの方は上記スクリプトをコピペしてアプリ内にスクリプトを作り、写真アプリなどから起動して見てください。

F値: 5.6
シャッタースピード: 1 / 400 秒
ISO: 200
焦点距離: 400.0 mm
撮影日時: 2016:11:20 15:21:48
カメラ: Canon EOS 7D Mark II
レンズ: EF100-400mm f/4.5-5.6L IS II USM

こんな感じで情報が取れます。他にもたくさん取ってはいますが、私が見たいのはこの情報だけなので必要な方は適宜増やして見ていただければ。