// fasterthumbnail.cs // FromStreamメソッドを使ったExifデータの読み込み using System; using System.IO; using System.Drawing; using System.Drawing.Imaging; using System.Diagnostics; class FasterThumbnail { static void Main() { string dir = @"C:\jpgs"; // 画像のあるディレクトリ string[] jpgFiles = Directory.GetFiles(dir, "*.jpg"); ImageConverter imgconv = new ImageConverter(); Stopwatch sw = Stopwatch.StartNew(); foreach (string jpg in jpgFiles) { Console.WriteLine(jpg); using (FileStream fs = File.OpenRead(jpg)) { // 画像オブジェクトの作成 Image orig = Image.FromStream(fs, false, false); int[] pils = orig.PropertyIdList; int index = Array.IndexOf(pils, 0x501b); // サムネイル・データ if (index == -1) { Console.WriteLine("画像にサムネイルが含まれていません。"); } else { // サムネイル・データの取得 PropertyItem pi = orig.PropertyItems[index]; byte[] jpgBytes = pi.Value; // サムネイルの作成 Image thumbnail = (Image)imgconv.ConvertFrom(jpgBytes); // サムネイルの保存 thumbnail.Save("tn_" + Path.GetFileName(jpg), System.Drawing.Imaging.ImageFormat.Jpeg); thumbnail.Dispose(); } orig.Dispose(); } } sw.Stop(); Console.WriteLine(sw.ElapsedMilliseconds + "ミリ秒"); // 出力例:619ミリ秒 } } // コンパイル方法:csc fasterthumbnail.cs