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

时间:2013-11-06 15:27:25

标签: python html image google-app-engine 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>

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

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

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

1 个答案:

答案 0 :(得分:7)

将字符串放在StringIO对象中:

from cStringIO import StringIO

imgfile = StringIO(self.request.get('datafile'))
img = Image.open(imgfile)

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

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

imgfile = StringIO()
img.save(imgfile, format='PNG')
imagestring = imgfile.getvalue()