2013-01-17 53 views
0

我有一個將處理大量圖像的.net 3.5應用程序。我需要檢查圖像擴展是否正確,圖像的高度和寬度以及PPI。我不想將整個圖像加載到.net圖像或位圖中,這會花費很長時間並且會佔用大量資源。我不能使用第三方插件或dll,當然它需要在昨天完成。在不加載整個圖像的情況下讀取圖像標題信息

因此,我正在讀取文件的初始字節,檢查「魔術」數字以確保圖像擴展匹配,然後查看大部分圖像類型的高度和寬度。這是更快,更少資源密集型。我可以使用一些幫助從一些圖像類型中讀取PPI,其中兩種類型已經超出了我對驗證擴展的影響。

BMP,JPG,GIF和PNG我需要幫助閱讀PPI。

  • 尋找像位於偏移量xx處的東西。

TIF,EPS和PSD我需要幫助閱讀高度,寬度和PPI。

  • 我幾乎停留在Eps和Psd文件上,任何事情都會有所幫助。

  • 是的,我知道tiflib,它看起來不錯,而且比我需要的方式。只處理高度,寬度和PPI的打火機版本會很棒。如果非要我能做到這一點,但我希望所有的人都有準備:-)

+2

要確定PPI,它不會那麼容易,因爲 「偏移XX」 的所有格式。例如,PNG像素尺寸是可選的(http://www.libpng.org/pub/png/book/chapter11.html#png.ch11.div.8),並且位於塊中以及其他塊中。你必須閱讀塊,直到你發現pHY(如果存在)。其他格式甚至不存儲像素尺寸,或像素尺寸可能不正確(但未被應用程序使用,因此它仍然有效)。 –

+1

PPI也依賴於輸出顯示。使用PPI的文件格式通常用於參考原始輸出設備。 –

+1

EPS和PSD是複合存儲文件。您將無法在特定的偏移量找到您要查找的內容。包含的每個圖像可以是位圖或矢量圖形。這兩種文件類型都可能有大量的圖像。 –

回答

-1

與其花費幾百開發時間寫作的時間和調試自己的多格式圖像解析,我會建議您查看優化現有方法的方法。雖然一些圖像格式很容易,但其他圖像格式很難。有些確實很難。如前所述,一些「格式」只是其他格式的容器。

這裏有一些建議:

Speed up loading an image from disk in a windows forms (c#.net) app

http://www.vcskicks.com/fast-image-processing.php

How can I find the pixel per inch value in a JPG image?

+1

正如我在原文中提到的那樣,加載整個圖像以檢索這三幅關於圖像的信息是資源密集型的。當你只需要讀取幾個字節時,爲什麼要加載整個10或25Mb文件?我們有資源和性能方面的顧慮,並花時間構建這個值得我的客戶。 – Loscas

4

所有字節位置假設第一字節是在位置1,不是0。

PNG文件寬度:字節9-12,高度:字節13-16,PPI:查找4個字節的簽名112 72 89 115(十進制值),字節1-4(以下)包含每個單元的X個像素,字節5-8包含每個單元的Y像素,字節9包含單位說明符(0 =未知,1 =米)。 PPI存儲在一個可選的塊中,可能不存在於所有的PNG中。

http://www.libpng.org/pub/png/spec/iso/index-object.htmhttp://en.wikipedia.org/wiki/PNG_file_format

BMP文件寬度:字節18-21,身高:字節22-25,PPI:字節38-41包含每米X像素,字節42-45包含在Y像素每米。

http://en.wikipedia.org/wiki/BMP_file_format

JPG文件 JPEG指的是壓縮,而JFIF是實際的文件存儲格式。寬度:,高度:,PPI:字節11-12包含每個單元的X個像素,字節13-14包含每個單元的Y個像素。字節10包含單位(0 =無單位,1 =每英寸像素數,2 =每釐米像素數)。

http://en.wikipedia.org/wiki/JPEG_File_Interchange_Formathttp://www.ecma-international.org/publications/files/ECMA-TR/TR-098.pdf

GIF文件寬度:字節7-8,身高:字節9-10,PPI:GIF文件不包含任何像素密度的信息。

http://en.wikipedia.org/wiki/Graphics_Interchange_Format

我提供鏈接到其他格式,因爲它們需要的格式的具體知識,以確定您所請求的信息被存儲或在哪裏。

http://partners.adobe.com/public/developer/tiff/index.html

http://en.wikipedia.org/wiki/Portable_Document_Formathttp://www.adobe.com/devnet/pdf/pdf_reference_archive.html

http://www.adobe.com/devnet-apps/photoshop/fileformatashtml/

+0

在我自己的實驗中,PNG寬度爲16(十進制),高度爲20。 –

相關問題