在Google App Engine中将二进制文件转换为PIL Image数据类型

Jes*_*osh 2 html python google-app-engine image python-imaging-library

我正在使用带有Python和Jinja的Google App Engine作为模板.在我的HTML模板中,我有这段代码,允许用户选择一个文件(Image):

    <form action="/step2" enctype="multipart/form-data" method="post">
        <input type="file" name="datafile" size="40">
        <input type="submit" value="upload" >
    </form>
Run Code Online (Sandbox Code Playgroud)

发布后,我可以通过self.request.get('datafile')获取图像,这似乎是二进制数据类型('str').我把它放到一个数据库中,我可以用以下方法显示:

    self.response.out.write('<div><img src="img?img_id=%s"></img>' % userimages.key())
Run Code Online (Sandbox Code Playgroud)

我正在努力找到一种方法将其转换为PIL.Image数据类型,以便用它进行图像处理.提前致谢!

Mar*_*ers 7

将字符串放在一个StringIO对象中:

from cStringIO import StringIO

imgfile = StringIO(self.request.get('datafile'))
img = Image.open(imgfile)
Run Code Online (Sandbox Code Playgroud)

所有PIL需求都是一个类似文件的对象; StringIO为此源提供给定字符串的实际数据.

在另一个方向,PIL写入一个StringIO对象,但你需要指定使用的格式:

imgfile = StringIO()
img.save(imgfile, format='PNG')
imagestring = imgfile.getvalue()
Run Code Online (Sandbox Code Playgroud)

  • @JessMcintosh:添加了有关如何从PIL图像中获取图像数据流的信息. (3认同)