C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■86274 / )  Re[2]: TIFの撮影日時がPropertyIdListで取得できない
□投稿者/ Hongliang (594回)-(2018/01/12(Fri) 15:25:07)
カメラは持ってないので、Win7 SP1で適当なpngファイルをMS Paintでtiffに保存しなおし、
Explorerを使ってプロパティ>詳細から撮影日時を設定して、ファイルを観察しました。

タグID 0x9003は存在していますが、これはTIFFタグとして存在しているのではなく、
TIFFタグ 0x8769 <Exif IFD> の子要素として存在しています。
GDI+ではExif IFDは無視されるみたいですね。
また、XMPパケットとしても撮影日時が格納されていました。
これはタグID 0x02BC <XMP> の内部に、XMLの形式で入っていますが、
これもGDI+では無視されるタグのようです。

System.Drawing/GDI+を使って解析する限りはどうにもならないんじゃないかなぁ、
という印象ですね。

主にWPFにて使用される画像コンポーネントであるSystem.Windows.Media.Imaging/WICを
使用すれば、これらのタグも取得できるのを確認しました。

var dec = BitmapDecoder.Create(...);
var frame = dec.Frames[0];
var meta = (BitmapMetadata)frame.Metadata;
var date1 = meta.GetQuery("/ifd/{ushort=34665}/{ushort=36867}");
var date2 = meta.GetQuery("/ifd/{ushort=700}/xmp:CreateDate");

// BitmapMetadataでのタグのたどり方
static void ShowMeta(BitmapMetadata meta, int depth) {
  foreach (var id in meta) {
    var value = meta.GetQuery(id);
    var child = value as BitmapMetadata;
    var indent = new String(' ', depth * 2);
    if (child == null) {
      Debug.Print("{0}{1}={2}", indent, id, value);
    }
    else {
      Debug.Print("{0}{1}:", indent, id);
      ShowMeta(child, depth + 1);
    }
  }
}

返信 編集キー/


管理者用

- Child Tree -