web-dev-qa-db-ja.com

Djangoでアップロードされた画像ファイルのサイズをImageFieldモデルを使用して変更するにはどうすればよいですか?

Djangoフォームを介してアップロードされた画像ファイルをImageFieldとしてサイズ変更する最も簡単な方法は何ですか?

18
johndoevodka

完全な動作例が見つからず、あちこちにビットがあるだけでイライラしました。自分で解決策をまとめることができました。これが完全な例です。フォームのclean()メソッドに入れます(ImageFieldのファイルプロパティを変更して、まったく同じ方法でモデルのsave()メソッドをオーバーライドすることもできます)。

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
25
johndoevodka
5
Efrin