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 相关文章推荐
pygame学习笔记(2):画点的三种方法和动画实例
Apr 15 Python
Python中Django发送带图片和附件的邮件
Mar 31 Python
PyQt5每天必学之带有标签的复选框
Apr 19 Python
在PyCharm中批量查找及替换的方法
Jan 20 Python
Python父目录、子目录的相互调用方法
Feb 16 Python
centos 安装Python3 及对应的pip教程详解
Jun 28 Python
python实现两个一维列表合并成一个二维列表
Dec 02 Python
Python操作Jira库常用方法解析
Apr 10 Python
python 瀑布线指标编写实例
Jun 03 Python
Python configparser模块封装及构造配置文件
Aug 07 Python
python统计mysql数据量变化并调用接口告警的示例代码
Sep 21 Python
通用的Django注册功能模块实现方法
Feb 05 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 GD库相关图像生成和处理函数小结
2016/09/30 PHP
跟着Jquery API学Jquery之一 选择器
2010/04/07 Javascript
Extjs中使用extend(js继承) 的代码
2012/03/15 Javascript
IE6背景图片不缓存问题解决方案及图片使用策略多个方法小结
2012/05/14 Javascript
js+数组实现网页上显示时间/星期几的实用方法
2013/01/18 Javascript
JS图片无缝、平滑滚动代码
2014/03/11 Javascript
利用Angularjs实现幻灯片效果
2016/09/07 Javascript
vue实现手机号码抽奖上下滚动动画示例
2017/10/18 Javascript
angularJs中跳转到指定的锚点实例($anchorScroll)
2018/08/31 Javascript
vue路由导航守卫和请求拦截以及基于node的token认证的方法
2019/04/07 Javascript
JavaScript将数组转换为链表的方法
2020/02/16 Javascript
[52:03]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第三场 1月31日
2021/03/11 DOTA
python中实现精确的浮点数运算详解
2017/11/02 Python
详解python持久化文件读写
2019/04/06 Python
django query模块
2019/04/20 Python
Python3.7基于hashlib和Crypto实现加签验签功能(实例代码)
2019/12/04 Python
利用python读取YUV文件 转RGB 8bit/10bit通用
2019/12/09 Python
tensorflow入门:tfrecord 和tf.data.TFRecordDataset的使用
2020/01/20 Python
Python yield的用法实例分析
2020/03/06 Python
Python使用pdb调试代码的技巧
2020/05/03 Python
Python性能分析工具py-spy原理用法解析
2020/07/27 Python
使用py-spy解决scrapy卡死的问题方法
2020/09/29 Python
Numpy中np.random.rand()和np.random.randn() 用法和区别详解
2020/10/23 Python
老板电器官方购物商城:老板油烟机、燃气灶、消毒柜、电烤箱
2018/05/30 全球购物
应届生求职推荐信
2013/10/28 职场文书
2014年端午节活动方案
2014/03/11 职场文书
《第一次抱母亲》教学反思
2014/04/16 职场文书
跳蚤市场口号
2014/06/13 职场文书
土建专业毕业生自荐书
2014/07/04 职场文书
先进党组织事迹材料
2014/12/26 职场文书
2015年复活节活动总结
2015/02/27 职场文书
中学图书馆工作总结
2015/08/11 职场文书
思想工作总结范文
2015/08/12 职场文书
如何在Mac上通过docker配置PHP开发环境
2021/05/29 PHP
python开发的自动化运维工具ansible详解
2021/08/07 Python
电脑关机速度很慢怎么办 提升电脑关机速度设置教程
2022/04/08 数码科技