0

最終的に保存する前にアップロードされた画像(ImageField)のサイズを変更したいのですが、PythonにはPILという画像ライブラリがあり、それを使用してそのタスクを実行したいと聞きましたが、開始方法がわかりません。

それを行う方法に関する提案はありますか?

ありがとう

4

2 に答える 2

0

ファイルを開いてサイズを変更できるモデルの保存関数をオーバーライドできます(モデルを保存するたびにサイズが変更されるため、お勧めしません)。ファイルのアップロード後にサイズを変更します(例:form.save()の前/中)

しかし、私見のはるかに優れた解決策は、これに専用のアプリを使用することです。私のお気に入りは、sorl-thumbnailsです。

于 2011-03-23T07:39:23.483 に答える
0

やり方はわかったのですが、簡単にする方法はありますか?私は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)

ありがとう

于 2011-03-23T07:40:28.523 に答える