django 收集的图片生成缩略图
时间: 2023-10-07 14:08:34 浏览: 95
django-thumbs:django-thumbs(http
在Django中生成收集的图片的缩略图,可以使用Pillow库。以下是一个简单的示例代码:
```python
from PIL import Image
from django.conf import settings
from django.core.files.storage import default_storage
from django.core.files.base import ContentFile
def generate_thumbnail(image_path, thumbnail_path, thumbnail_size):
with default_storage.open(image_path, 'rb') as f:
with Image.open(f) as im:
im.thumbnail(thumbnail_size)
with default_storage.open(thumbnail_path, 'wb') as tf:
im.save(tf, 'JPEG')
def save_model(instance, force_insert=False, force_update=False, using=None, update_fields=None):
# 保存模型前的处理
super().save(force_insert, force_update, using, update_fields)
# 生成缩略图
image_path = instance.image.name
if image_path:
thumbnail_path = '%s_thumbnail.jpg' % (instance.image.name,)
thumbnail_size = (100, 100)
generate_thumbnail(image_path, thumbnail_path, thumbnail_size)
```
在上述代码中,我们定义了一个generate_thumbnail函数,用于生成缩略图。该函数接受三个参数:原始图片的路径、缩略图的路径、缩略图的大小。
同时,我们也定义了一个save_model方法,在保存模型时会自动调用该方法。在该方法中,我们调用了generate_thumbnail函数生成缩略图,并将其保存到默认存储中。
需要注意的是,我们在生成缩略图的路径中添加了_thumbnail的后缀,以避免与原始图片的文件名冲突。同时,我们在生成缩略图时也可以根据需要调整缩略图的大小。
阅读全文