4

我正在编写一个程序来转换一些数据,主要是一堆 Tiff 图像。一些 Tiffs 似乎对它们有一个小问题。它们在某些查看器(Irfanview,客户的旧系统)中显示良好,但在其他查看器(客户的新系统,Window 的图片和传真查看器)中显示不佳。我手动查看了二进制数据,所有标签看起来都不错。任何人都可以推荐一个可以分析它并告诉我它有什么问题(如果有的话)的应用程序吗?

另外,为了清楚起见,我只是转换单独存储在数据库中的图像数据并复制图像,我自己没有编辑图像,所以我很确定我不会把它们搞砸.

UDPATE: 对于任何感兴趣的人,以下是来自好文件和坏文件的标签:

BAD
标签类型长度值
256 图像宽度 SHORT 1 1652
257 图像长度 SHORT 1 704
258 Bits Per Sample SHORT 1 1
259 Compression SHORT 1 4
262 Photometric SHORT 1 0
266 Fill Order SHORT 1 1
273 Strip Offsets LONG 1 210 (d2 Hex)
274 方向 SHORT 1 3
277 个样本/像素 SHORT 1 1
278 行/条 SHORT 1 450
279 条字节数 LONG 1 7264 (1c60 Hex)
282 X 分辨率 RATIONAL 1 <194> 200 / 1 = 200.000
283 Y 分辨率 RATIONAL 1 <202> 200 / 1 = 200.000
284 平面配置 SHORT 1 1
296 分辨率单位 SHORT 1 2

良好
标签类型长度值
254 新子文件类型 LONG 1 0 (0 Hex)
256 图像宽度 SHORT 1 1193
257 图像长度 SHORT 1 788
258 Bits Per Sample SHORT 1 1
259 压缩 SHORT 1 4
262 光度学 SHORT 1 0
266 填充顺序 SHORT 1 1
270 图像描述 ASCII 45 256
273 长条偏移量 1 1118(45e 十六进制)
274 方向 短 1 1
277 每像素采样数 短 1 1
278 行每条长 1 788(314 十六进制)
279 条带字节计数 LONG 1 496 (1f0 Hex)
280 最小采样值 SHORT 1 0
281 最大采样值 SHORT 1 1
282 X 分辨率 RATIONAL 1 <301> 200 / 1 = 200.000
283 Y 分辨率 RATIONAL 1 <309> 200 / 1 = 200.000
284 平面配置 SHORT 1 1
293 Group 4 Options LONG 1 0 (0 Hex)
296 分辨率单位 SHORT 1 2

4

5 回答 5

3

通常这是因为 tiff 使用的是 6.0 标准中的 JPEG 编码,不久之后该标准就被放弃了。查看标签 259。如果是 6,那就是问题所在。JPEG 应该使用“较新”方案进行编码,7。标准库不会读取旧方案,包括 Windows 附带的方案。

您可以使用 libtiff(或任何使用 libtiff 的库或程序,它们中的大多数都这样做)来读取这些,但在 libtiff 中默认情况下故意禁用方案 6 (OJPEG)。您必须修补并重新编译 libtiff 才能启用它。这是一个带有说明的链接

于 2009-07-09T14:00:17.220 回答
1

坏图像中的RowsPerStrip为450,小于图像长度(高度)704。这意味着图像必须有两个条带。因此,StripOffsets 和 StripByteCounts 的计数都必须为 2。这些指示条数据所在的文件偏移量。当这些偏移丢失时,只有第一个片段是可解码的。

于 2010-05-26T00:19:57.673 回答
1

LibTIFF可能会有所帮助。查看 Tiff 的问题通常是由使用的压缩引起的。我会调查的。

于 2009-07-09T13:44:04.760 回答
0

TIFF 是一种非常复杂的格式——不仅在于它可以编码的数据的丰富性(各种像素格式、各种编码器)——而且还因为文件格式本身的丰富性(它是一种可以容纳任何东西的通用结构)。对于我们在成像中的每一个想法,它基本上都是垃圾场。:-)

我强烈推荐 .NET 3.0 的 WPF Imaging 库。它的 Tiff 解码器虽然不支持所有像素格式,但它非常强大并且具有用于访问所有元数据的简单界面。

于 2009-07-09T18:18:47.697 回答
0

值得一试 ImageMagick。我的理解是 TIFF 是一种相当复杂的文件格式,并不是每个人都能完全实现该格式。

于 2009-07-09T13:44:01.343 回答