[英]Extract image file metadata
我希望能夠在不打開文件的情況下提取圖像的元數據和擴展屬性。 換句話說,當您在Windows中右鍵單擊文件並選擇“詳細信息”選項卡時,如何以編程方式訪問所顯示的信息?
使用.Net Framework 4.5及更高版本執行此操作的正確方法是什么? 我已經找到了各種方法來做到這一點,但文章都提到了.Net Framework 2,至少可以說是單調乏味且可能已經過時了。 具體來說,是否有任何庫使這容易做到?
我需要能夠以下列格式獲取圖像的高度和寬度尺寸:png,jpg,jpeg,gif,bmp和pdf(可以安全地假設pdf僅包含1頁)。
我正在玩這個來完成這件事。 以下是我的發現。
PropertyItems
Id
值中的十六進制值的含義。 *請注意:ASCII轉換器打印出一堆奇怪的字符(例如,“♦☺☺☻♥♣☺☺☻☺☺☻♥♣☺☻♥♥♀♥♥)”),我的筆記本電腦開始發出一些屬性的嗶嗶聲。 您可能需要其他編碼。 如果有人知道,請告訴我。
using System;
using System.Drawing.Imaging;
using System.Drawing;
using System.Text;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
// Add reference => Assemblies => Framework => System.Drawing
// Set the path to your photo file.
var path = @"[Path to your image]";
// Create image object
var image = new Bitmap(path);
// Get PropertyItems
var propItems = image.PropertyItems;
// Remove encoding object
var encodings = new ASCIIEncoding();
// Display
foreach (var propItem in propItems)
{
// The values below come from http://msdn.microsoft.com/en-us/library/xddt0dz7(v=vs.110).aspx
// Find al values available with Console.WriteLine(propItem.Id.ToString("x"));
if (propItem.Id.ToString("x").Equals("110")) //Equipment model
{
var model = encodings.GetString(propItem.Value);
Console.WriteLine("Model:\t" + model);
}
if (propItem.Id.ToString("x").Equals("9003")) //ExifDTOriginal
{
var datetime = encodings.GetString(propItem.Value);
Console.WriteLine("Taken:\t" + datetime);
}
}
Console.Read();
}
}
}
// =>
// Model: FinePix S9500
// Taken: 2012:11:30 13:58:04
希望這可以幫助。 :-)
/編輯為sasha_gud狀態的注釋,使用BitmapSource類,通過Metadata屬性公開EXIF元數據可能更容易。
我親自完成了這個,因為我需要為我的一個項目讀取XMP數據。
為此,我使用了: http : //sourceforge.net/projects/csxmptk/ ,它是Adobe XMP工具包的包裝器。
它並不是最高效的,但這對我來說並不是一個問題,因為我在上傳資產時將其作為批處理過程。
當然,有些東西需要打開文件來讀取元數據。 話雖這么說,它可能不是最有效的方法,但System.Drawing.Image
類應該為您提供所需的一切。 使用FromFile
創建Image對象。 然后,您可以獲得維度的Height
和Width
屬性,以及PropertyIdList
和PropertyItems
以獲取可用的其他信息。
BTW,據我所知,每種圖像格式都有高度和寬度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.