2013-03-20 67 views
9

在Django中,是否可以在上传的图像保存到磁盘之前更改(调整大小)上传的图像?我宁愿不使用任何额外的应用程序来做到这一点。Django在上传过程中调整图像大小

+3

[你尝试过什么?](http://whathaveyoutried.com) – arulmr 2013-03-20 09:33:03

+0

使用PIL作业:http://stackoverflow.com/questions/273946/how-do-i-resize-an -image-using-pil-and-maintain-its-aspect-ratio – 2013-03-20 09:34:17

+0

你需要使用外部库或应用程序来实现,因为django没有任何预定义的方法来实现你想要做的事情。 – Amyth 2013-03-20 11:38:13

回答

19

我很生气,我不能在这里和那里找到一个完整的工作示例,仅位。我设法把解决方案放在一起。这里是完整的例子,我把它放在窗体的clean()方法中(你也可以用完全相同的方式重写模型save()方法 - 改变ImageField的文件属性)。

import StringIO 
from PIL import Image 

image_field = self.cleaned_data.get('image_field') 
image_file = StringIO.StringIO(image_field.read()) 
image = Image.open(image_file) 
w, h = image.size 

image = image.resize((w/2, h/2), Image.ANTIALIAS) 

image_file = StringIO.StringIO() 
image.save(image_file, 'JPEG', quality=90) 

image_field.file = image_file 
+0

感谢这个例子,但我不明白一切......什么是“信息”?否则,在python 3.x它是io.StringIO(...) – HydrUra 2013-09-27 10:15:53