情報科学屋さんを目指す人のメモ(FC2ブログ版)

何かのやり方や、問題の解決方法をどんどんメモするブログ。そんな大学院生の活動「キャッシュ」に誰かがヒットしてくれることを祈って。

ブログ内検索

スポンサーサイト このエントリーを含むはてなブックマーク

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
スポンサー広告 | 編集

JPEG(Exif)など、画像メタデータ(タグ)に関する資料リンク集 このエントリーを含むはてなブックマーク

Exif,TIFF(JPEG)などのメタデータ(タグ)に関する資料をまとめてみました。 基本的には、仕様書を参考にしてください。 仕様書を見る前に、紹介ページを見ると、全体の把握に役立ちます。

C#/.NETにおける、BMP、GIF、EXIF、JPG、PNG、TIFF画像のメタデータを取得する方法については、 「C#(.NET)でJPEGファイルのExifを読み取る方法」をご覧ください。VBも.NETならC#と同様です

スポンサーサイト
Exif | コメント:0 | トラックバック:0 | 編集

C#で、実際にExifの情報を取り出してみる このエントリーを含むはてなブックマーク

以前の記事で紹介した、割と原始的な方法で、実際にどれだけのExifタグが取り出せるかをやってみました。

取り出し対象JPEGファイル

今回取り出し対象のファイルは、CanonEOS 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の仕様書を見ていると、画像の横幅、縦幅がそれぞれImageWidthImageLengthに格納されているのかと思っていましたが、今回調べたファイルでは、それら二つの項目がありませんでした。

では、ないのかというと、実はそれらの数値はPixelXDimensionと、PixelYDimensionに記録されていました。やってみて初めて分かりました。

MakerNoteとは

数あるタグの中で、ダントツの長さをもつMakerNoteタグ。これは、カメラメーカー独自のタグを記録するためのものですが、これは現在のタグの読み取り方法では、ひとかたまりのバイト列になってしまい、解析が必要です。もともと仕様が公開されているわけでもないので、仕方ないのかもしれません。

しかし、メーカーごとに詳細な情報が保存されている貴重な領域なので、読めたら便利なのですが。

全体について

思っていたよりも、読み出せたタグの数は少なかったです。しかし、それでも基本的な情報は十分ありますし、そもそもこれくらいの保存量が普通なのかもしれません。

よく分からない点がまだあるので、もう少し調べてみようかと思います。

Exif | コメント:0 | トラックバック:0 | 編集

C#(.NET)でJPEGファイルのExifを読み取る方法 このエントリーを含むはてなブックマーク

C#から、Exifを利用するアプリケーションを作るために、Exifについて少々調べました。

Exif についての資料

基本的に、Exifについて知りたいのなら、Exif.orgExif 2.1のpdfファイルや、TIFF 6のpdfファイルが役に立ちます。特に、Exif 2.1 の仕様書であるExif2-1.pdfを見るのがよいでしょう(もちろん、新しい方のExif 2.2でもいいです)。

当然のように英語なので、見るのがめんどくさいかもしれないですが、注目すべきは、Exif2-1.pdfで言えば、p.24の、フィールドと呼ばれる項目がどのような要素から成り立っているかを示しているページと、p.131の、Exifの例と、p.158の、単位変換(APEX)のページが役に立ちます。

C#からExifを取得する方法の基礎

さて、実際に、一番基本となるとっかかりを紹介します。とっかかりと言っても、仕様書をどのように見ればいいのかをちょっと意識したとっかかりを書いてみます。

具体的に行いたいのは、C#で簡単に取得できる項目を片っ端から取得して、表示してみることです。

サンプルコード

まず、JPEGファイルを、Bitmapオブジェクトとして読み込みます。System.Drawingを参照に加えて、

using System.Drawing;

...
Bitmap bitmap = new Bitmap(@"c:\IMG_0001.JPG");

とすればOK。

つぎに、Exifの項目(フィールド)の詰まった配列を取り出します

using System.Drawing.Imaging;

...
PropertyItem[] props = bitmap.PropertyItems;

そして、中身をすべて表示してみます。

for (int i = 0; i < props.Length; i++)
{
PropertyItem p = props[i];
Console.Out.WriteLine(p.Id + "," + p.Len + "," + p.Type + "," + p.Value);
}

このようにすることで、

271,6,2,System.Byte[]
272,14,2,System.Byte[]
・・・

のように出力されます。

出力結果の見方

出力のうちの、最初の行、

271,6,2,System.Byte[]

について考察してみます。これを見ると、

Id=271
Len=6
Type=2
Value=System.Byte[]

ということになりますが、System.Byte[]は、型を表しているだけなので、内容を調べてみると、バイト配列が記録されていることが分かります。手元のファイルでは、{67,97,110,111,110,0}となっていました。

ここで、Id、Len、Type、Valueそれぞれについて考察します。

Id

Idは、Exif2-1.pdf の p.24における、Tagに相当します。今回は、Id=271なので、このpdf中を、271で検索すると、以下のような情報が手に入ります。

Make

The manufacturer of the recording equipment. This is the manufacturer of the DSC, scanner, video digitizer or other equipment that generated the image. When the field is left blank, it is treated as unknown.
Tag = 271 (10F.H)
Type = ASCII
Count = Any
Default = none

つまり、この項目は、カメラメーカーを指すと言うことが分かります。

Len

Lenは、ValueのByte配列の長さです。今回は6なので、Valueが6byte分あることになります。

Type

Typeは、先ほどのExif2-1.pdfのp.24のTypeと同じです。ここでは、2なので、ASCII型ということになります。つまり、Valueは文字列です。

Value

TypeがASCIIだとわかっているので、Valueのバイト配列{67,97,110,111,110,0}を最後の0をヌル文字だとおもって変換してみると、Canonとなります。

項目の内容

つまり、以上から、この項目は、カメラメーカーがキヤノンであることを表していたことが分かります。

まとめ

とりあえず、とっかかりがつかめたと思います。ほかの項目についても、同様に考えれば、Exifの内容を次々読み取れるはずです。

Exif | コメント:0 | トラックバック:1 | 編集
 | HOME | 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。