C#で、実際にExifの情報を取り出してみる
以前の記事で紹介した、割と原始的な方法で、実際にどれだけのExifタグが取り出せるかをやってみました。
取り出し対象JPEGファイル
今回取り出し対象のファイルは、Canon の EOS 50Dで作成された画像ファイルです。
取り出し方法
「C#(.NET)でJPEGファイルのExifを読み取る方法」で紹介した方法を利用します。プロパティ配列の先頭から、どんどん取り出してみました。
Exifデータ読み取り結果
結果は以下の通り。
- 271,Make
- 272,Model
- 274,Orientation
- 282,XResolution
- 283,YResolution
- 296,ResolutionUnit
- 306,DateTime
- 315,Artist
- 531,YCbCrSubPositioning
- 33432,Copyright
- 33434,ExposureTime
- 33437,FNumber
- 34850,ExposureProgram
- 34855,ISOSpeedRatijngs
- 36864,ExifVersion
- 36867,DateTimeOriginal
- 36868,DateTimeDigitized
- 37121,ComponentsConfiguration
- 37377,ShutterSpeedValue
- 37378,ApertureValue
- 37380,ExposureBiasValue
- 37383,MeteringMode
- 37385,Flash
- 37386,FocalLength
- 37500,MakerNote
- 37510,UserComment
- 37520,SubSecTime
- 37521,SubSecTimeOriginal
- 37522,SubSecTimeDigitized
- 40960,FlashPixVersion
- 40961,ColorSpace
- 40962,PixelXDimension
- 40963,PixelYDimension
- 20545,不明
- 20546,不明
- 41496,FocalPlaneXResolution
- 41497,FocalPlaneYResolution
- 41488,FocalPlaneResolutionUnit
- 41985,不明
- 41986,不明
- 41987,不明
- 41990,不明
- 0,不明
- 20515,不明
- 20525,不明
以上は、配列内部に格納されていた順番で、タグの名称は、Exif.orgのExifの仕様書から検索したものです。よく使いそうな項目は強調しておきました。
不明とはいったい
Exifの仕様書からは分からない項目が多数ありました。今後調べます。
ExposureTime と ShutterSpeed
かたや露光時間、かたやシャッタースピードということで、両者は同じ意味のようです。
しかし、露光時間ExposureTimeは、カメラでおなじみの、「シャッタースピードの逆数」が記録されているのに対し、シャッタースピードShutterSpeedには、「シャッタースピードがAPEX単位」で記録されています。APEXに付いては、Exif2-1.pdfなどを参考にしてください。
画像の縦横の幅は?
Exifの仕様書を見ていると、画像の横幅、縦幅がそれぞれImageWidth、ImageLengthに格納されているのかと思っていましたが、今回調べたファイルでは、それら二つの項目がありませんでした。
では、ないのかというと、実はそれらの数値はPixelXDimensionと、PixelYDimensionに記録されていました。やってみて初めて分かりました。
MakerNoteとは
数あるタグの中で、ダントツの長さをもつMakerNoteタグ。これは、カメラメーカー独自のタグを記録するためのものですが、これは現在のタグの読み取り方法では、ひとかたまりのバイト列になってしまい、解析が必要です。もともと仕様が公開されているわけでもないので、仕方ないのかもしれません。
しかし、メーカーごとに詳細な情報が保存されている貴重な領域なので、読めたら便利なのですが。
全体について
思っていたよりも、読み出せたタグの数は少なかったです。しかし、それでも基本的な情報は十分ありますし、そもそもこれくらいの保存量が普通なのかもしれません。
よく分からない点がまだあるので、もう少し調べてみようかと思います。