0

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

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

BMP、JPG、GIF 和 PNG 我在阅读 PPI 时需要帮助。

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

TIF、EPS 和 PSD 我需要帮助来阅读高度、宽度和 PPI。

  • 我几乎被困在 EPS 和 Psd 文件上,任何事情都会有所帮助。

  • 是的,我知道 tiflib,它看起来很棒,而且远远超出了我的需要。一个只处理高度、宽度和 PPI 的更轻的版本会很棒。如果必须,我可以做到这一点,但我希望有人准备好了:-)

4

2 回答 2

4

所有字节位置都假定第一个字节位于位置 1,而不是 0。

PNG 文件宽度:字节 9-12,高度:字节 13-16,PPI:查找 112 72 89 115(十进制值)的 4 字节签名,字节 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/

于 2013-01-29T22:45:05.927 回答
-1

与其花费数百小时的开发时间编写和调试您自己的多格式图像解析器,我建议您寻找优化现有方法的方法。虽然有些图像格式很容易,但有些则很难。有些真的很难。如前所述,一些“格式”只是其他格式的容器。

以下是一些建议:

加快在 Windows 窗体(c#.net)应用程序中从磁盘加载图像

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

如何在 JPG 图像中找到每英寸像素值?

于 2013-01-28T22:41:52.373 回答