最終的に保存する前にアップロードされた画像(ImageField)のサイズを変更したいのですが、PythonにはPILという画像ライブラリがあり、それを使用してそのタスクを実行したいと聞きましたが、開始方法がわかりません。
それを行う方法に関する提案はありますか?
ありがとう
最終的に保存する前にアップロードされた画像(ImageField)のサイズを変更したいのですが、PythonにはPILという画像ライブラリがあり、それを使用してそのタスクを実行したいと聞きましたが、開始方法がわかりません。
それを行う方法に関する提案はありますか?
ありがとう
ファイルを開いてサイズを変更できるモデルの保存関数をオーバーライドできます(モデルを保存するたびにサイズが変更されるため、お勧めしません)。ファイルのアップロード後にサイズを変更します(例:form.save()の前/中)
しかし、私見のはるかに優れた解決策は、これに専用のアプリを使用することです。私のお気に入りは、sorl-thumbnailsです。
やり方はわかったのですが、簡単にする方法はありますか?私はpythonとdjangoが初めてなので、これが適切な方法であるかどうかわかりません。
以下は私のコードです:
from django.db.models.signals import pre_delete, pre_save
def on_save_image(sender, **kwargs):
import PIL
obj = kwargs['instance']
if obj.file:
try:
original = sender.objects.get(pk = obj.pk)
if original.file:
#if change image then delete original file
original.file.delete()
except ObjectDoesNotExist:
pass
finally:
img = PIL.Image.open(obj.file)
img.thumbnail((500, 500))
# reset pointer to start at 0 again
obj.file.open()
img.save(obj.file)
pre_save.connect(on_save_image, sender = Image)
# delete file in memory
def on_delete_image(sender, **kwargs):
obj = kwargs['instance']
if obj.file:
obj.file.delete()
pre_delete.connect(on_delete_image, sender = Image)
ありがとう