python - X11 Tkinter + PIL + py2app = IOError 无法识别图像文件

标签 python tkinter python-imaging-library py2app ioerror

我在尝试导出到 py2app 时遇到 python 程序(python 2.7.3、X11 Tkinter、py2app 0.6.4、MacOS X 10.7.4)问题。该问题仅在该程序的独立 py2app-ified 应用程序版本中开始出现。当我运行创建应用程序的 python 源文件时,问题不存在,所以我觉得它一定与 py2app 导出有关。

问题:当我启动 GUI 时,第一次尝试加载有效的图像文件时,图像加载失败,并且从 PIL 图像模块收到以下错误:

File "Image.pyc", line 1980, in open
IOError: cannot identify image file

当我(不关闭 GUI 或其他任何东西)尝试打开完全相同的文件时,它加载完美,没有错误或问题。对于我尝试的任何图像文件,每次都会发生这种情况 - 第一次尝试加载失败,后续尝试成功。我应该补充一点,在第一个错误之后,没有图像文件加载失败 - 即使它们与第一个错误不同。

一些注意事项: - 图像文件是一个序列,并且非常大(大约300 MB),因此为了加快加载过程,我使用了mmap。我尝试过删除mmap步骤,直接将常规文件对象交给ImagePIL。直接打开它,问题不受影响。
- 我还尝试在将其提供给 ImagePIL.open 之前查找文件的开头,但这没有效果。 - py2app 安装文件非常普通 - 它只包含一些配置文件和一个图标。

以下是有问题的图像加载函数的相关部分:

import Image as ImagePIL
import mmap as m
...
...
def loadImage(self):
    errorLog.debug("Attempting to open image \""+self.filenameVar.get()+"\"")
    try:
        if self.fileMap is not None:
            self.fileMap.close()
        imageFile = open(self.filenameVar.get(), 'r')
        self.fileMap = m.mmap(imageFile.fileno(), 0, prot=m.PROT_READ)
#       self.fileMap.seek(0)
        self.imageSeries = ImagePIL.open(self.fileMap)
        imageFile.close()
    except(IOError):
        errorLog.exception("Failed to open image \""+self.filenameVar.get()+"\"")
        return

我很困惑 - 有什么想法吗?提前致谢!

编辑:我应该补充一点,Tkinter、PIL 和 py2app 是使用 MacPorts 2.1.2 安装的,以防万一有帮助。

最佳答案

似乎 py2app 没有将 PIL 的图像插件包含到应用程序包中,尽管 py2app 配方之一试图确保将它们包含在内。

您可以尝试的一件事是使用“python setup.py py2app --packages=PIL”进行构建,然后使用“import PIL.Image as ImagePIL”来使用它。

我还不明白为什么 PIL 配方不起作用,这可能是 MacPorts 构建 python 包的方式(我自己不使用 MacPorts)。

关于python - X11 Tkinter + PIL + py2app = IOError 无法识别图像文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14925144/

相关文章:

python - 如何将字典的值(列表)与单独的列表进行比较?

python - 如何使用 Python 的 difflib 生成类似于 Unix sdiff 命令的两个文件的并排比较?

python - 运行我的 Python 脚本时出错

python - 如何将字符串转换为图像?

python - 从字符串标签Python中提取二进制类向量

python - 用时间戳格式的变量替换 pandas 数据帧上的年份

python - 如何从Python中的日期时间格式中减去一天?

python - 如何轻松避免 Tkinter 卡住?

python-3.x - 如何在没有 PIL 或 Pillow 的情况下在 Canvas 上旋转图像(由 PhotoImage 类加载)?

python - 为什么 `imshow` 以彩色显示 2D(非 RGB)数组,如何将这样的彩色图像导出到 .png 文件?