读取图像标题信息而不加载整个图像

时间:2013-01-17 23:46:36

标签: .net image header byte

我有一个.net 3.5应用程序,它将处理大量图像。我需要检查图像扩展名是否正确,图像高度和宽度以及PPI。我不想将整个图像加载到.net图像或位图中,这将花费很长时间并且需要资源密集。我不能使用第三方插件或dll,当然它需要在昨天完成。

所以,我正在读取文件的初始字节,检查"魔法"确保图像扩展名匹配的数字,然后是我需要处理的大多数图像类型的图像高度和宽度。这更快,资源更少。我可以使用一些帮助从一些图像类型中读取PPI,到目前为止,其中两种类型只是让我难以验证扩展。

BMP,JPG,GIF和PNG我需要帮助阅读PPI。

  • 寻找位于偏移xx的东西。

TIF,EPS和PSD我需要帮助读取高度,宽度和PPI。

  • 我几乎坚持使用Eps和Psd文件,任何事情都会有所帮助。

  • 是的我知道tiflib,它看起来很棒,而且比我需要的还多。只处理高度,宽度和PPI的较轻版本会很棒。如果我必须这样做,但我希望有人准备好了: - )

2 个答案:

答案 0 :(得分: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/

答案 1 :(得分:-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?