如何从内存文件创建PIL图像?

12 投票
2 回答
19818 浏览
提问于 2025-04-16 09:35

更具体来说,我想要改变通过Django的ImageField上传的图片的文件类型。

我现在的想法是创建一个自定义的ImageField,并重写保存的方法来处理这个文件。

我在把内存中的文件转换成PIL图像实例时遇到了困难。

谢谢大家的帮助。

2 个回答

20

你试过使用 StringIO 吗?

可以看看这个文档 http://effbot.org/imagingbook/introduction.htm#more-on-reading-images

#Reading from a string 
import StringIO

im = Image.open(StringIO.StringIO(buffer))
17

注意,Django的ImageField是从FieldFile继承了open这个方法。这个方法会返回一个流对象,这个流对象可以传给PIL的Image.open(这是一个标准的方法,用来从图像流创建Image对象):

stream = imagefield.open()
image = Image.open(stream)
stream.close()
# ... and then save image with: image.save(outfile, format, options)

可以查看PIL图像文档了解更多信息。

撰写回答