2013-01-17 52 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。 –

相关问题