' fasterthumbnail.vb ' FromStreamメソッドを使ったExifデータの読み込み Imports System Imports System.IO Imports System.Drawing Imports System.Drawing.Imaging Imports System.Diagnostics Class FasterThumbnail Shared Sub Main() Dim dir As String = "C:\jpgs" ' 画像のあるディレクトリ Dim jpgFiles As String() = Directory.GetFiles(dir, "*.jpg") Dim imgconv As New ImageConverter() Dim sw As Stopwatch = Stopwatch.StartNew() For Each jpg As String In jpgFiles Console.WriteLine(jpg) Using fs As FileStream = File.OpenRead(jpg) ' 画像オブジェクトの作成 Dim orig As Image = Image.FromStream(fs, False, False) Dim pils As Integer() = orig.PropertyIdList Dim index As Integer = Array.IndexOf(pils, &H501B) ' サムネイル・データ If index = -1 Then Console.WriteLine("画像にサムネイルが含まれていません。") Else ' サムネイル・データの取得 Dim pi As PropertyItem = orig.PropertyItems(index) Dim jpgBytes As Byte() = pi.Value ' サムネイルの作成 Dim thumbnail As Image = CType(imgconv.ConvertFrom(jpgBytes), Image) ' サムネイルの保存 thumbnail.Save("tn_" + Path.GetFileName(jpg), _ System.Drawing.Imaging.ImageFormat.Jpeg) thumbnail.Dispose() End If orig.Dispose() End Using Next sw.Stop() Console.WriteLine(sw.ElapsedMilliseconds & "ミリ秒") ' 出力例:619ミリ秒 End Sub End Class ' コンパイル方法:vbc fasterthumbnail.vb