【VBA】カメラで撮影した写真(画像ファイル)から、Exif情報を取得する

カメラで撮影した写真から
 ・Exif情報を取得
できます!
※ここでいう「写真」は「画像ファイル」です。

Exif情報とは
 ・カメラの製造元とモデル
 ・撮影日時
 ・経度と緯度
等の情報です!
※経度と緯度を活用すれば、撮影場所を特定できます。

各SNSへアップされた画像に
Exif情報はありません。
※各SNSのyり自動で削除されてます。
※個人情報漏洩の防止のためです。

PR

VBAコード

ここでは例として、
 ・デスクトップ配下の画像ファイル「IMG_0264-225×300.jpeg」から
 ・Exif情報を取得して
 ・イミディエイトウィンドウへ出力
します。
Exif情報として
 ・カメラの製造元とモデル
 ・撮影日時
 ・経度と緯度
を取得します。

デスクトップ配下の画像ファイル「IMG_0264-225x300.jpeg」
デスクトップ配下の画像ファイル「IMG_0264-225×300.jpeg」

Exif情報は
 ・画像ファイルの「プロパティ」画面の「詳細タブ」で確認
です。

カメラの製造元とモデル
カメラの製造元とモデル
カメラの製造元とモデル
カメラの製造元とモデル
経度と緯度
経度と緯度
'変数の宣言を必須
Option Explicit

Sub sample()
    
    Dim photFile As String
    Dim objWia   As Object
    Dim p As Object
    Dim makerName As String
    Dim ModelName As String
    Dim dateOfShooting As String
    Dim latitude As String
    Dim longitude  As String
    
    '対象の写真(画像ファイル)を指定
    photFile = "C:\Users\user\Desktop\IMG_0264-225x300.jpeg"
    
    Set objWia = CreateObject("Wia.ImageFile")
    
    '写真(画像ファイル)をロード
    objWia.LoadFile photFile
    
    For Each p In objWia.Properties
    
        Select Case p.Name
            'カメラの製造元
            Case "EquipMake"
                makerName = p.Value
            'カメラのモデル
            Case "EquipModel"
                ModelName = p.Value
            '撮影日時
            Case "ExifDTOrig"
                dateOfShooting = p.Value
            '緯度
            Case "GpsLatitude"
                latitude = p.Value(1) + p.Value(2) / 60 + p.Value(3) / 3600
            '経度
            Case "GpsLongitude"
                longitude = p.Value(1) + p.Value(2) / 60 + p.Value(3) / 3600
        End Select
        
    Next
    
    'イミディエイトウィンドウへ出力
    Debug.Print "カメラの製造元:" & makerName
    Debug.Print "カメラのモデル:" & ModelName
    Debug.Print "撮影日時    :" & dateOfShooting
    Debug.Print "緯度        :" & latitude
    Debug.Print "経度        :" & longitude
    
    '後片付け
    Set objWia = Nothing
    
End Sub

Exif情報を取得する画像ファイルのパスを指定します(16行目)。
※状況に合わせて画像ファイルのパスを変更してください。

「ImageFileオブジェクト」を取得します(18行目)。

「ImageFileオブジェクト」の「LoadFile」メソッドにより、画像ファイルをロードします(21行目)。
※上記ではデスクトップ配下の画像ファイル「IMG_0264-225×300.jpeg」をロードしています。

「ImageFileオブジェクト」の「Properties」プロパティにより、「Propertiesオブジェクト(=コレクション)」を取得します(23行目)。
※取得した「Propertiesオブジェクト(=コレクション)」をループ処理させています(23~43行目)。

「Propertiesオブジェクト(=コレクション)」のItemから、「Name」が
 ・「EquipMake」の「Value」  ※カメラの製造元
 ・「EquipModel」の「Value」 ※カメラのモデル
 ・「ExifDTOrig」の「Value」  ※撮影日時
 ・「GpsLatitude」の「Value」  ※緯度
 ・「GpsLongitude」の「Value」※経度
を取得します(25~41行目)。
※上記が「Exif情報」です。

取得した情報(Exif情報)を、イミディエイトウィンドウへ出力します(46~50行目)。

PR

実行結果

カメラで撮影した写真(画像ファイル)から、Exif情報を取得できました。

実行結果
実行結果
PR

参考①

以下の拡張子の写真(画像ファイル)から、Exif情報を取得できたことを確認しています。
・jpg
・jpeg
・png

PR

参考②

経度と緯度を活用することで、撮影場所を特定できます。
※特定方法の詳細は割愛します。

PR

参考③

上記のVBAコードで使用した以下の詳細は、公式サイトをご確認ください。
※英語版の公式サイトしか無い様子です。

●「ImageFileオブジェクト」の「LoadFile」メソッド


●「ImageFileオブジェクト」の「Properties」プロパティ


●「Propertiesオブジェクト(=コレクション)」


●イミディエイトウィンドウへ出力