代码之家  ›  专栏  ›  技术社区  ›  Kevin

TIFF分析器

  •  4
  • Kevin  · 技术社区  · 15 年前

    我正在写一个程序来转换一些数据,主要是一堆tiff图像。有些争吵似乎有点小问题。它们在某些查看器(irfanview,客户端的旧系统)中显示良好,但在其他查看器(客户端的新系统、窗口的图片和传真查看器)中不显示。我手动查看了二进制数据,所有的标记看起来都正常。有人能推荐一个可以分析它的应用程序,告诉我,如果有什么问题的话?

    另外,为了清楚起见,我只是转换关于单独存储在数据库中的图像的数据并复制这些图像,我没有自己编辑这些图像,所以我很确定我没有弄乱它们。

    UDPATE: 对于任何感兴趣的人,以下是一个好文件和坏文件中的标记:

    坏的
    标记类型长度值
    256图像宽度短11652
    257图像长度短1704
    每个样本258位短11
    259压缩短14
    262光度短10
    266短期补货订单11
    273带材偏移长1210(D2六角)
    274定向短13
    每像素277个样本短11
    278行/条短1450
    279条字节计数长17264(1C60十六进制)
    282 x分辨率rational 1<194>200/1=200.000
    283 Y分辨率理性1<202>200/1=200.000
    284平面配置短11
    296短分辨率单元12


    标记类型长度值
    254新子文件类型long 10(0 hex)
    256图像宽度短1193
    257图像长度短1788
    每个样本258位短11
    259压缩短14
    262光度短10
    266短期补货订单11
    270图像描述ascii 45 256
    273长条偏移1118(45E六角)
    274定向短1 1
    每像素277个样本短11
    278行/条长1788(314 Hex)
    279条字节计数长1496(1f0十六进制)
    280 min短采样值10
    281最大采样值短11
    282 x分辨率理性1<301>200/1=200.000
    283 Y分辨率理性1<309>200/1=200.000
    284平面配置短11
    293组4选项长10(0十六进制)
    296短分辨率单元12

    5 回复  |  直到 15 年前
        1
  •  3
  •   R Ubben    15 年前

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

    您可以使用LIbTIFF(或者使用LIbTIFF的任何库或程序,其中大多数都读取),但是在LIPTIFF中默认方案6(OJPEG)是故意禁用的。必须修补并重新编译libtiff才能启用它。 Here's a link with instructions .

        2
  •  1
  •   Jim Blizard    15 年前

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

        3
  •  1
  •   Ryan Wong    15 年前

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

        4
  •  0
  •   Dave Gamble    15 年前

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

        5
  •  0
  •   Frank Krueger    15 年前

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

    我强烈推荐.net 3.0中的wpf图像库。它的tiff解码器虽然不支持所有像素格式,但非常健壮,并且有一个访问所有元数据的简单界面。