2012-06-23 2 views
3

내 토네이도 응용 프로그램은 머리글에 이미지를 수신합니다. 그래서 크기를 재조정하여 저장하고 싶습니다. 하지만 이미지를 여는 데 어려움이 있습니다. PIL 객체를 만들려면 이미지가있는 파일이 있어야하고 PIL의 이미지 모듈 open() 메서드에 파일 이름을 전달해야합니다. 하지만 헤더와 파일 정보 만 있습니다. Image 오브젝트를 생성하기 위해 임시 파일을 생성해야합니까? 아니면 다른 해결책일까요?토네이도 및 PIL : 머리글에서 이미지 열기

class ImageHandler(BaseHandler): 
    def post(self): 
     f = open("out.jpg", "w") 
     im = Image.open(self.request.files["ImageUpload"][0]["body"]) 
     im.save(f, "JPEG") 
     self.finish() 

TIA! 우리는 파일 이름이나 open()에 파일 - 류의 객체를 제공 할 수

UPD1 (@bernie)

Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/site-packages/tornado-2.2-py2.7.egg/tornado/web.py", line 988, in _execute 
    getattr(self, self.request.method.lower())(*args, **kwargs) 
    File "server.py", line 160, in post 
    im = Image.open(StringIO(self.request.files["ImageUpload"][0]["body"])) 
TypeError: 'module' object is not callable 
+0

그것은 현재의 플랫폼을 기반으로 문제가되지 수 있지만, 당신은 항상 바이너리 데이터에 대한 바이너리 모드를 사용합니다. 이 경우'w'를'wb'로 변경하십시오. – bernie

+0

이진 쓰기 모드를 사용하지 않으면 어떤 종류의 오류가 발생합니까? – dizpers

+0

바이너리 플래그가 중요한 플랫폼에 있다면 이미지가 손상 될 수 있습니다. – bernie

답변

2

PIL documentation states.
StringIO을 사용하여 파일과 유사한 객체를 PIL로 제공 할 수 있습니다. 코드에 적용
예 :

from PIL import Image 
from StringIO import StringIO 

im = Image.open(StringIO(self.request.files["ImageUpload"][0]["body"])) 
im.save("out.jpg", "JPEG") 
+0

업데이트 된 게시물을보세요 :) – dizpers

+0

다음과 같이 가져 오기하십시오 :'from StringIO import StringIO'. – bernie

+0

thx! 이게 도움이됩니다! 왜 이런 종류의 수입이 중요할까요? – dizpers