Django上传图片生成缩略图

本文介绍了如何在Django中处理图片上传时自动生成缩略图,以提高页面加载速度并减少流量浪费。通过编写生成缩略图的函数以及在models.py中重写图片保存方法,实现了在保存图片时同步保存缩略图到服务器,并将缩略图信息存入数据库。
摘要由CSDN通过智能技术生成

上传图片时,有些较大的图片如果不经压缩就在前台展示,就会造成页面刷新速度慢、流量浪费等情况,所以我们在上传图片时可以生成该图片的缩略图。

需求:在上传图片的同时,生成图片的缩略图保存到服务器,并将缩略图地址保存到服务器

先写一个生成缩略图的方法:

from PIL import Image
def make_thumb(path,size=150):  #指定size,在这里表示图片的高度
    pixbuf = Image.open(path)
    width, height = pixbuf.size

    if height > size:  #如果高度大于150,则进行压缩
        delta = height / size
        width = int(width / delta)
        pixbuf.thumbnail(
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的后缀,以避免与原始图片的文件名冲突。同时,我们在生成缩略图时也可以根据需要调整缩略图的大小。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值