2014-06-12 5 views
3

EMF 이미지 형식, Python PIL (베개) 이미지 라이브러리 및 Python 패키징을위한 Pyinstaller 프로그램의 교차점에서 특이한 문제가 있습니다. Windows 실행 파일로 변환합니다.PIL을 사용하여 jpeg로 변환하는 emf는 python에서 작동하지만 pyinstaller로는 패키징되지 않습니다 exe

EMF 파일을 JPEG로 변환하기 위해 PIL/Pillow를 사용하는 스크립트가 있습니다. 이것은 파이썬에서 파이썬 스크립트를 실행할 때 올바르게 작동합니다. 그러나 Pyinstaller.exe -F를 사용하여 EXE에 패키지하면 작동하지 않습니다. 베개 버전

, 내가 PIL 버전

"Cannot convert image1.emf".

, 나는 말한다 더 이상 메시지가 말하는 간단한 오류 :

Traceback (most recent call last): File "", line 38, in File "", line 27, in convertImageFile File "C:\Embibe\Git\content-ingestion\src\build\convertImage\out00-PYZ.pyz\PIL .Image", line 2126, in open IOError: cannot identify image file 'image1.emf'

다른 사람이 발생하여 발견 한 작업 솔루션?

필요할 경우 피투성이의 세부 사항은 다음과 ... :-)

OS : 윈도우 7 64 비트 (그러나 모든 소프트웨어는 32 비트)

소프트웨어 :: 파이썬 : 2.7.5 , pyInstaller 중에 : 2.1, PIL : convImg.py image1.emf 작품 올바르게에서는 image1.jpg를 생성 내장 된 파이썬, 베개 :로 2.4.0

파이썬 스크립트 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) 

실행됩니다.

\python27\scripts\pyinstaller.exe -F convImg.py을 사용하여 exe로 패키지되고 convImg.exe image1으로 실행하면 위의 필로 및 PIL 버전에 나열된 오류가 발생합니다.

관련 게시물이 여기에 있는데, Pyinstaller troubles with Pillow입니다. pyinstaller 대신 py2app를 사용하는 해결책은 MacOS 용이고 Windows가 필요하기 때문에 나를위한 옵션이 아닙니다. 나는 창, py2exe 및 cx_freeze에 대해 유사한 대안을 사용하는 것을 고려했지만 pyinstaller처럼 자체 내장 exe를 작성하지 않았습니다.

덕분에, 미트

+0

업데이트 : 관련성이있을 수있는 다른 질문을 발견했습니다. 자세한 내용을 이해하고 시도해야합니다. http : // stackoverflow.com/questions/10453858/pil-and-jpeg-library-on-windows – AmitRao

+1

업데이트 : py2exe 설명서의 또 다른 단서는 http://www.py2exe.org/index.cgi/py2exeAndPIL – AmitRao

+0

에 오신 것을 환영합니다. 환상적인 질문을하고 또한 묻고 나서 연구를하는 방법! +1. 두 번째 주석의 링크는 제가 막 소개하려고했던 것입니다. 컴파일 된 응용 프로그램에서 PIL을 사용하여 작업하는 방법입니다 (pyinstaller가 아닌 py2exe를 사용하지만 해결 방법은 동일 할 수 있음). 잘 했어, 친구. –

답변

1

좋아, 문제는 PIL이 그것을 동적으로 많은 이미지 플러그인을 로딩에 의존하고 pyInstaller 중에 또는 py2exe에를 사용하여 포장 할 때이다 http://www.py2exe.org/index.cgi/py2exeAndPIL

에서 내 자신의 질문에 대한 답을 발견 이 플러그인을 찾을 수 없습니다. 열쇠는 입니다. 명시 적으로 코드의 모든 플러그인을 가져옵니다. b. 이미 초기화 된 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는 올바르게 :-) 감사를 실행 gddc 내가 올바른 방향으로 나아 갔는지 확인하기 위해서!