Python 图像库 - 无法打开大型 .tif 文件

标签 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 打开。

感谢您的帮助。

最佳答案

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

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

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

如错误消息所示,检测器在读取文件的前几个字节时失败,远远早于它读取图像的尺寸。更有可能是以下原因之一:

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

至于解决方案,我建议:

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

    文件 orthoQB02_11JUL040015472-M1BS-101001000DB70900_u16ns3413.tif

    应该打印类似的东西

    Untitled.tiff:TIFF 图像数据,大端

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

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

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

关于Python 图像库 - 无法打开大型 .tif 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21866146/

相关文章:

python - 多处理:如何在多个进程之间共享一个字典?

java - 图像在一个全新的 jframe 中?

调整大小时的 Python 图像库图像分辨率

python - 使用正则表达式提取问题和答案

python - 通过移动通过散点图绘制的点来动画 python pyplot

python - 如何在开发服务器(Google App Engine)中使用生产 BlobStore

google-app-engine - Google App Engine 上的 PIL 可以使用哪些系统字体?

python - 将bmp转换为tiff,python

python - 打印 numpy 数组作为 python 列表的成员

html - CSS从混合混合模式差异中分离图像