管理人Kのひとりごと

デジモノレビューやプログラミングや写真など

PowershellでExifから撮影日時を取得する(powershell)

PowershellでExifから撮影日時を取得する。
「撮影日時」っぽいタグがいくつかあるから、とりあえず全部拾ってみた。それらがそれぞれ何を意味するかは...今後の宿題...
追記:調べました↓
Exif内の撮影日時の話 - 管理人Kのひとりごと

タグとIDの対応付けは以下を参考にしました。
PropertyItem.Id Property (System.Drawing.Imaging) | Microsoft Learn

param(
[string]$filename    # 処理対象ファイル名
)

# エラーがあった時点で処理終了
$ErrorActionPreference = "stop"
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
[void][System.Reflection.Assembly]::LoadWithPartialName("System.IO")

# 撮影日取得処理
# 引数1 :Bitmapオブジェクト
# 戻り値:なし
function GetSatsueiDate($sourceImage){
    $propDate=""
    
    # Exif情報を取得
    $private:properties = $sourceImage.PropertyItems
    foreach($property in $properties){
      if($property.Id -eq 306){ #0x0132 PropertyTagDateTime
        $propDate = [System.Text.Encoding]::ASCII.GetString($property.Value)
        echo "PropertyTagDateTime:$propDate"
      } elseif($property.Id -eq 36867){ #0x9003 PropertyTagExifDTOrig
        $propDate = [System.Text.Encoding]::ASCII.GetString($property.Value)
        echo "PropertyTagExifDTOrig:$propDate"
      } elseif($property.Id -eq 36868){ #0x9004 PropertyTagExifDTDigitized
        $propDate = [System.Text.Encoding]::ASCII.GetString($property.Value)
        echo "PropertyTagExifDTDigitized:$propDate"
      }
    }
}

# メイン処理
# 引数1 :元画像ファイルのフルパス
# 戻り値:なし
function script:Main($originalFileName){
  $private:sourceImage = $null

  try{
      # 元画像取得(Bitmap)
      $sourceImage = New-Object System.Drawing.Bitmap($originalFileName)

      # 撮影日取得
      GetSatsueiDate $sourceImage

      # 元Bitmapを閉じる
      $sourceImage.Dispose()
      
      echo "終了しました:$originalFileName"
  }catch{
    echo "例外が発生しました:$error"
  }finally{
    try{
      if($null -ne $sourceImage){
        $sourceImage.Dispose()
      }
    }catch{
      echo "画像クローズ時の例外:$error"
    }
  }
}

# 撮影日取得処理の実行
Main $filename

実行結果は以下の通りです。

PS C:\Users\hoge\Desktop\撮影日取得> .\getSatsueiDate.ps1 .\P1130910.JPG
PropertyTagDateTime:2016:12:23 17:17:48
PropertyTagExifDTOrig:2016:12:23 17:17:48
PropertyTagExifDTDigitized:2016:12:23 17:17:48
終了しました:.\P1130910.JPG
PS C:\Users\hoge\Desktop\撮影日取得>