我应该在哪个文件中编写代码来调整Django上的Image文件?

时间:2016-04-18 09:13:20

标签: python django resize python-imaging-library

我想调整图像大小并将其保存到Django上的数据库中。我发现有几个网站提到了Django的调整大小,有些写在models.py,但其他网站写在views.py。我应该在哪个文件中编写代码views.pymodels.py

from PIL import Image
img = Image.open('original.jpg', 'r')
img.thumbnail((100, 100), Image.ANTIALIAS)
img.save('thumbnail.jpg', 'JPEG', quality=75, optimize=True)

models.py

class Photo(models.Model):
    photo = models.ImageField(upload_to="...")
    def save(self, *args, **kwargs):
        do_somehting()
        super(Photo, self).save()

2 个答案:

答案 0 :(得分:2)

我认为最佳做法是使用celery等后台作业,并在模型保存模式下调用它。

最好使用Pillow包和sorl及其thumbnail制作任意大小的缩略图,并通过redis

自动编制索引

考虑这个要点:

import picke
create_thumbnail_images.apply_async([pickle.dumps(self.image_path), USER_IMAGE_THUMB_SIZES], countdown=5)

您可以在模型的save操作中以上示例代码在后台创建缩略图,因此您永远不会因创建这些缩略图而被阻止。

答案 1 :(得分:1)

您可以使用imagekit,例如:

from django.db import models
from imagekit.models import ProcessedImageField
from imagekit.processors import Resize

class SomeModel(models.Model):
    ...
    photo = models.ProcessedImageField(upload_to="...", processors=[Resize(650, 402))

在您的模型中似乎更好,因为图片将始终调整大小(在您网站的操作和管理面板中)。