Pythonでいろいろやってみる

Pythonを使った画像処理や機械学習などの簡単なプログラムを載せています。

フォルダ内の写真のファイル名を撮影時刻に変更する

 デジカメ等で写真を撮ると「DSC-1234」のように連番のファイル名が付きますが、「DSC-9999」の次は「DSC-0001」となるため、ファイルを連続処理する場合など少し面倒です。ファイルのEXIF情報から撮影時刻を取得し、ファイル名を撮影時刻に変更します。

関連記事

写真のexifから緯度・経度を取得する

準備

 ファイル名を変更したい画像ファイル(デジカメで撮影した写真)3つを、jupyter notebookファイル(***.ipynb)と同じディレクトリにフォルダ'rename'を作成しその中に保存しました。

環境
  • windows10 home
  • Anaconda 3/ jupyter notebook 6.4.6
  • Python 3.10.4
  • Pillow 9.1.0
コード

 フォルダ'rename'に保存されたファイルをリスト化し、ひとつづつ読みだしPillowのImage.openで開きます。開いた画像ファイル(写真)に対して._getexif()メソッドでexif情報を取得します。画像ファイルを開いたままだとファイル名変更の際エラーとなるのでImage.closeで閉じます。exif情報のタグ306の撮影時刻情報を取得、撮影時刻情報は、コロンで区切られたYYYY:MM:DD hh:mm:ss(年:月:日 時:分:秒)の書式なので、そこからコロンを除いたYYYYMMDD-hhmmssの形式でファイル名を作成、ファイル名を変更します。

import os 
from PIL import Image

# renameフォルダ中のファイルをリストに
files = os.listdir('rename/')

# renameフォルダ中のファイルを順番に読みだす
for file in files:
    img = Image.open('rename/'+file) # 画像を開く
    exif = img._getexif() # EXIF情報を得る
    img.close() # 画像を閉じる
    
    # EXIF情報からタグ306(撮影時刻)を抽出
    # コロンを除いたデータからファイル名作成
    for tag, value in exif.items():
        if tag == 306: 
            filename = (value[0:4]
                       +value[5:7]
                       +value[8:10]
                       +'-'
                       +value[11:13]
                       +value[14:16]
                       +value[17:19])

            # 撮影時刻から作成したファイル名に変更する
            os.rename('rename/'+file, 'rename/'+filename+'.jpg')      
実行結果

ファイル名が撮影時刻に変更されます。

ブログランキングに参加しています

にほんブログ村 IT技術ブログへ
にほんブログ村