Python Imaging Library - 无法打开大型.tif文件

时间:2014-02-18 21:47:29

标签: python image python-imaging-library tiff

我正在研究.tif格式的大型卫星图像文件。首先,我只是尝试打开文件并使用PIL查看它们。这是我到目前为止编写的代码:

from PIL import Image
import os.path

script_dir = os.path.dirname(os.path.abspath(__file__))
im = Image.open(os.path.join(script_dir, 'orthoQB02_11JUL040015472-M1BS-101001000DB70900_u16ns3413.tif'))
im.show()

不幸的是,我收到错误消息:

IOError                                   Traceback (most recent call last)
/Applications/Canopy.app/appdata/canopy-1.3.0.1715.macosx-x86_64/Canopy.app/Contents/lib/python2.7/site-packages/IPython/utils/py3compat.pyc in execfile(fname, *where)
      202             else:
      203                 filename = fname
----> 204             __builtin__.execfile(filename, *where)

/Users/zlazow/Desktop/Geo Research Files/documents-export-2014-02-13 (3)/showfiles.py in <module>()
      3 
      4 script_dir = os.path.dirname(os.path.abspath(__file__))
----> 5 im = Image.open(os.path.join(script_dir, 'orthoQB02_11JUL040015472-M1BS-101001000DB70900_u16ns3413.tif'))
      6 im.show()

/Users/zlazow/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/PIL/Image.pyc in open(fp, mode)
      1978                 pass
      1979 
----> 1980     raise IOError("cannot identify image file")
      1981 
      1982 #

IOError: cannot identify image file

图像文件对于PIL来说太大了吗?我可以在预览应用程序中打开一个较小的(200MB).tif文件,但是当我尝试使用PIL打开它时,它会创建一个在预览中打开的BMP图像,但图像永远不会加载。

所有其余文件(300MB ++)都不会打开预览或PIL。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

Image构造函数查看其内部格式列表(取决于PIL的编译方式),并询问每个格式是否可以解析文件。

作为检测器功能的输入,使用图像文件的前几个字节。通过查看TIFF图像阅读器,它会查找以下魔术字节之一:

["MM\000\052", "II\052\000", "II\xBC\000"]

如错误消息所示,在读取文件的前几个字节之前,检测器会失败,然后才能读取图像的尺寸。出现以下原因之一的可能性更大:

  • 文件已损坏
  • 该文件不是TIFF图像
  • 该文件是PIL无法理解的一些奇特/新的TIFF子格式

至于解决方案,我建议:

  • 使用file命令尝试识别文件格式,例如

    file orthoQB02_11JUL040015472-M1BS-101001000DB70900_u16ns3413.tif

    应打印类似

    的内容

    Untitled.tiff: TIFF image data, big-endian

  • 尝试打开文件,例如Photoshop并查看它是否能理解文件。

  • 手动检查标题,查看文件是否以上面的魔术字节开头。

编辑:由于您确定了格式(BigTIFF),因此您有两个选择:转换它或找到一个Python库来加载它。 http://bigtiff.org内置了BigTIFF的非官方libtiff版本。您可以尝试针对此libtiff版本编译pylibtiff,或使用ImageMagick(使用BigTIFF支持编译)将图像转换为常规TIFF文件第一