django 使用 PIL 压缩图片的例子


Posted in Python onAugust 16, 2019

在最近做项目时,发现服务器上的图片比较大,数据传输时会消耗很多流量,体验非常不好。为了缓解这一现象,决定使用gzip压缩数据流,但是发现gzip对于json数据的压缩效果很好,但对于图片的压缩效果很差。无奈,只能写一段代码,将服务器上的图片挨个压缩一下。

我的服务器上的程序,是用django写的,数据库为sqlite,图片文件存储在media目录下。

先看models.py,只有一个ImageField类型的变量picture,也就是一会压缩图片需要用到的变量。

class CrossPicture(models.Model):
  picture = models.ImageField(upload_to='cross_picture', blank=True, null=True)

Python有一个PIL库,可以处理图像,压缩部分的代码就是用PIL写的

def compressImage(request):

  picture_list = models.CrossPicture.objects.all()

  for cp in picture_list:
    image = Image.open(cp.picture) # 通过cp.picture 获得图像 
    width = image.width 
    height = image.height
    rate = 1.0 # 压缩率

    # 根据图像大小设置压缩率
    if width >= 2000 or height >= 2000:
      rate = 0.3
    elif width >= 1000 or height >= 1000:
      rate = 0.5
    elif width >= 500 or height >= 500:
      rate = 0.9  

    width = int(width * rate)  # 新的宽
    height = int(height * rate) # 新的高

    image.thumbnail((width, height), Image.ANTIALIAS) # 生成缩略图
    image.save('media/' + str(cp.picture), 'JPEG')  # 保存到原路径
    cp.save()
  return HttpResponse('compress ok')

以上这篇django 使用 PIL 压缩图片的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python 使用requests模块发送GET和POST请求的实现代码
Sep 21 Python
在IPython中执行Python程序文件的示例
Nov 01 Python
python3安装speech语音模块的方法
Dec 24 Python
解决python ogr shp字段写入中文乱码的问题
Dec 31 Python
Python中的字符串切片(截取字符串)的详解
May 15 Python
Python依赖包整体迁移方法详解
Aug 15 Python
Django REST Framework之频率限制的使用
Sep 29 Python
python实现堆排序的实例讲解
Feb 21 Python
Kears 使用:通过回调函数保存最佳准确率下的模型操作
Jun 17 Python
python如何安装下载后的模块
Jul 03 Python
基于Python实现简单学生管理系统
Jul 24 Python
Python实现PIL图像处理库绘制国际象棋棋盘
Jul 16 Python
详解PyTorch手写数字识别(MNIST数据集)
Aug 16 #Python
Python 等分切分数据及规则命名的实例代码
Aug 16 #Python
Python 分发包中添加额外文件的方法
Aug 16 #Python
解决Djang2.0.1中的reverse导入失败的问题
Aug 16 #Python
基于django传递数据到后端的例子
Aug 16 #Python
Django 拆分model和view的实现方法
Aug 16 #Python
利用Python实现kNN算法的代码
Aug 16 #Python
You might like
php获得当前的脚本网址
2007/12/10 PHP
php+ajax做仿百度搜索下拉自动提示框(有实例)
2012/08/21 PHP
php查询ip所在地的方法
2014/12/05 PHP
Yii框架数据库查询、增加、删除操作示例
2019/10/14 PHP
Jquery ajax不能解析json对象,报Invalid JSON错误的原因和解决方法
2010/03/27 Javascript
《JavaScript高级程序设计》阅读笔记(一) ECMAScript基础
2012/02/27 Javascript
浅析js封装和作用域
2013/07/09 Javascript
自动设置iframe大小的jQuery代码
2013/09/11 Javascript
javascript中动态函数用法实例分析
2015/05/14 Javascript
jquery控制页面部分刷新的方法
2015/06/24 Javascript
javascript实现日期时间动态显示示例代码
2015/09/08 Javascript
第一次接触神奇的Bootstrap
2016/10/14 Javascript
JavaScript实现数值自动增加动画
2017/12/28 Javascript
jQuery操作cookie的示例代码
2019/06/05 jQuery
js实现开关灯效果
2020/03/30 Javascript
在Express中提供静态文件的实现方法
2019/10/17 Javascript
JavaScript变量Dom对象的所有属性
2020/04/30 Javascript
vue-cli 关闭热更新操作
2020/09/18 Javascript
压缩包密码破解示例分享(类似典破解)
2014/01/17 Python
跟老齐学Python之深入变量和引用对象
2014/09/24 Python
Python爬虫:通过关键字爬取百度图片
2017/02/17 Python
Python中字符串List按照长度排序
2019/07/01 Python
Pytorch 使用不同版本的cuda的方法步骤
2020/04/02 Python
使用django自带的user做外键的方法
2020/11/30 Python
Flask中jinja2的继承实现方法及实例
2021/03/03 Python
历史学专业个人的自我评价
2013/10/13 职场文书
计算机本科生自荐信
2013/10/15 职场文书
财产保全担保书范文
2014/04/01 职场文书
欢迎领导检查标语
2014/06/27 职场文书
班级团队活动方案
2014/08/14 职场文书
好好学习保证书
2015/02/26 职场文书
南京南京观后感
2015/06/02 职场文书
2015入党自传书范文
2015/06/26 职场文书
广播稿:校园广播稿范文
2019/04/17 职场文书
承诺书应该怎么写?
2019/09/10 职场文书
Windows Server 修改远程桌面端口的实现
2022/06/25 Servers