如何从内存文件创建PIL图像?
更具体来说,我想要改变通过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图像文档了解更多信息。