使用PIL的emf到jpeg转换在python中工作但不是pyinstaller打包的exe

时间:2014-06-12 14:23:48

标签: python python-imaging-library pyinstaller .emf

我在EMF图像格式,python PIL(以及Pillow)图像库和用于将Python打包成Windows可执行文件的Pyinstaller程序的交叉点存在一个特殊问题。

我有一个使用PIL / Pillow将EMF文件转换为JPEG的脚本。当我在python中运行python脚本时,这可以正常工作。但是,当我使用Pyinstaller.exe -F将其打包到EXE中时,它不起作用。

使用Pillow版本,我收到一个简单的错误

  

"无法转换image1.emf"。

使用PIL版本,我收到一条更长的消息:

  

追踪(最近一次通话):     文件"",第38行,in     在convertImageFile中的文件"",第27行     文件" C:\ Embibe \ Git \ content-ingestion \ src \ build \ convertImage \ out00-PYZ.pyz \ PIL   .Image",第2126行,处于公开状态   IOError:无法识别图像文件' image1.emf'

有没有其他人遇到过这个并找到了有效的解决方案?

如果您需要血腥细节,请遵循......: - )

操作系统:Windows 7 64位(但所有软件都是32位)

Software :: Python:2.7.5,Pyinstaller:2.1,PIL:内置Python,Pillow:2.4.0

Python脚本convImg.py:

from __future__ import print_function
import os, sys
from PIL import Image

for infile in sys.argv[1:]:
    f, e = os.path.splitext(infile)
    outfile = f + ".jpg"
    if infile != outfile:
        try:
            Image.open(infile).convert('RGB').save(outfile)
        except IOError:
            print("cannot convert", infile)

运行方式:convImg.py image1.emf正常工作并生成image1.jpg。

使用\python27\scripts\pyinstaller.exe -F convImg.py打包到exe并运行为convImg.exe image1时会给出上面列出的Pillow和PIL版本的错误。

我在这里发现了一个相关的帖子,Pyinstaller troubles with Pillow但是它的解决方案,即使用py2app而不是pyinstaller对我来说不是一个选项,因为那是MacOS,我需要Windows。我考虑过对windows,py2exe和cx_freeze使用类似的替代方法,但它们不像pyinstaller那样创建一个自包含的exe。

谢谢, 阿米特

1 个答案:

答案 0 :(得分:2)

好的,我在http://www.py2exe.org/index.cgi/py2exeAndPIL

找到了我自己的问题的答案

问题是PIL依赖于动态加载许多图像插件,并且当使用pyinstaller或py2exe打包时,它无法找到这些插件。所以关键是要  一个。显式导入代码中的所有插件  湾将Image类状态标记为已初始化  C。显式指定保存命令的目标格式

因此,我将convImag.py修改为:

from __future__ import print_function
import os, sys
from PIL import Image
from PIL import BmpImagePlugin,GifImagePlugin,Jpeg2KImagePlugin,JpegImagePlugin,PngImagePlugin,TiffImagePlugin,WmfImagePlugin # added this line

Image._initialized=2 # added this line

for infile in sys.argv[1:]:
    f, e = os.path.splitext(infile)
    outfile = f + ".jpg"
    if infile != outfile:
        try:
            Image.open(infile).convert('RGB').save(outfile,"JPEG") # added "JPEG"
        except IOError:
            print("cannot convert", infile)

在此之后,pyinstaller工具就像一个魅力,打包的exe运行正确:-) 感谢g.d.d.c.通过解决方案确认我在正确的轨道上!