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

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

ブログ内検索

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

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

スポンサー広告 | 編集
このエントリーをはてなブックマークに追加 Clip to Evernote

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 | 編集
このエントリーをはてなブックマークに追加 Clip to Evernote

この記事のコメント

コメントの投稿 エントリの新旧に関わらず、極力18時間中に返信します。














この記事のトラックバック

トラックバックURL:
<お買い得情報> SDカードが超安い!上海問屋 今なら楽天カード作成で、実質無料~2000円引きで、上記商品が購入できちゃいます! 超お得!楽天で2000円分のお買い物ができる楽天カードの申込は下記をクリック!! 楽天市場で使える2,000円分のポイントプレゼ?... …
2009-09-30 Wed 02:18 副業ニュースNO.1
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。