簡體   English   中英

提取圖像文件元數據

[英]Extract image file metadata

我希望能夠在不打開文件的情況下提取圖像的元數據和擴展屬性。 換句話說,當您在Windows中右鍵單擊文件並選擇“詳細信息”選項卡時,如何以編程方式訪問所顯示的信息?

截圖

使用.Net Framework 4.5及更高版本執行此操作的正確方法是什么? 我已經找到了各種方法來做到這一點,但文章都提到了.Net Framework 2,至少可以說是單調乏味且可能已經過時了。 具體來說,是否有任何庫使這容易做到?

編輯

我需要能夠以下列格式獲取圖像的高度和寬度尺寸:png,jpg,jpeg,gif,bmp和pdf(可以安全地假設pdf僅包含1頁)。

我正在玩這個來完成這件事。 以下是我的發現。

  1. 您可以使用System.Drawing和System.Drawing.Imaging命名空間
  2. 后者通過using語句導入並執行Add reference => Assemblies => Framework => System.Drawing
  3. 找出存儲在PropertyItems Id值中的十六進制值的含義。
  4. 使用ASCII轉換器將它們轉換為人類可讀的文本。*
  5. 打印到屏幕,或其他什么。

*請注意: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對象。 然后,您可以獲得維度的HeightWidth屬性,以及PropertyIdListPropertyItems以獲取可用的其他信息。

BTW,據我所知,每種圖像格式都有高度和寬度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM