2009-07-09 69 views
4

我正在写一个程序来转换一些数据,主要是一堆Tiff图像。一些Tiffs似乎与他们有一个小问题。他们在一些观众(客户的旧系统Irfanview)中显示得很好,但在其他客户(客户的新系统,Window的图片和传真浏览器)中却没有。我已经手动查看了二进制数据,并且所有标签看起来都没问题。任何人都可以推荐一个可以分析它的应用程序,并告诉我什么,如果有的话,它是错的吗?为了清楚起见,我只是将有关图像的数据单独存储在数据库中并复制图像,我不是自己编辑图像,所以我很确定我是不要搞乱他们。Tiff分析仪

UDPATE: 任何有兴趣,这里是从好的和坏的文件标签:

BAD
标签类型长度值
256图像宽度短1 1652
257图像长度短1 704
258比特每样品SHORT 1 1
259压缩SHORT 1 4
262 Photometry SHORT 1 0
266填充订单SHORT 1 1
273地带偏移LONG 1 210(D2十六进制)
274取向SHORT 1个3
277样品每像素SHORT 1个1
278行每地带SHORT 1 450
279地带字节计数LONG 1 7264(1c60十六进制)
282 X分辨率RATIONAL 1 < 194>1分之200= 200.000
283 Y分辨率RATIONAL 1 < 202>1分之200= 200.000
284的平面配置SHORT 1 1
296分辨率单位SHORT 1 2

良好
标签类型长度值
254新子文件类型LONG 1 0(0十六进制)
256图片宽度SHORT 1 1193
257图像长度SHORT 1 788
258位每个采样SHORT 1 1
259压缩SHORT 1 4
262光度SHORT 1 0
266填充订单SHORT 1 1
270图像描述ASCII 45 256
273地带偏移LONG 1 1118(45E十六进制)
274取向SHORT 1个1
277样品每像素SHORT 1个1
278行每地带LONG 1 788(314十六进制)
279地带字节计数LONG 1 496(1F0十六进制)
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组4个选项LONG 1 0(0十六进制)
296分辨率单位SHORT 1 2

回答

0

值得给予ImageMagick的一个去。我的理解是TIFF是一种相当复杂的文件格式,并不是每个人都完全实现了这种格式。

1

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

3

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

您可以使用libtiff(或任何使用libtiff的库或程序,其中大多数都会这样做)来读取这些内容,但默认情况下在libtiff中禁用方案6(OJPEG)。你将不得不打补丁并重新编译libtiff来启用它。 Here's a link with instructions

+0

标签259是4(添加字符以满足最小注释长度要求...叹息) – Kevin 2009-07-09 14:14:02

0

TIFF是一种非常复杂的格式 - 不仅是它可以编码的数据的丰富性(各种像素格式,各种编码器),而且还因为文件格式本身的丰富性(其可以容纳的一般结构任何东西)。这基本上是我们在成像过程中所有想法的垃圾场。 :-)

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

1

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