我想调整图像大小并将其保存到Django
上的数据库中。我发现有几个网站提到了Django
的调整大小,有些写在models.py
,但其他网站写在views.py
。我应该在哪个文件中编写代码views.py
或models.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()
答案 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))
在您的模型中似乎更好,因为图片将始终调整大小(在您网站的操作和管理面板中)。