龙卷风和PIL:从标题打开图像

时间:2012-06-23 18:06:02

标签: python python-2.7 python-imaging-library tornado

我的Tornado应用会在标题中收到图片。所以,我想重新调整它的大小并存储它。但是我打开图像时遇到了麻烦 - 创建PIL对象我必须有带图像的文件,并将文件名传递给PIL的Image模块的open()方法。但我只有标题和文件信息。我应该创建临时文件来创建Image对象吗?或者其他一些解决方案?

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!

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

1 个答案:

答案 0 :(得分:2)

PIL documentation states我们可以为open()提供文件名或类文件对象 因此,我们可以使用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")