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获取beautifulphoto随机某图片代码实例
Dec 18 Python
python通过post提交数据的方法
May 06 Python
Python中死锁的形成示例及死锁情况的防止
Jun 14 Python
Python开发微信公众平台的方法详解【基于weixin-knife】
Jul 08 Python
Python实现excel转sqlite的方法
Jul 17 Python
Python面向对象编程基础解析(二)
Oct 26 Python
使用pandas的DataFrame的plot方法绘制图像的实例
May 24 Python
Python实现TCP探测目标服务路由轨迹的原理与方法详解
Sep 04 Python
Python matplotlib以日期为x轴作图代码实例
Nov 22 Python
Python xlrd/xlwt 创建excel文件及常用操作
Sep 24 Python
Python操作PostgreSql数据库的方法(基本的增删改查)
Dec 29 Python
opencv实现图像几何变换
Mar 24 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网上调查系统
2006/10/09 PHP
用PHP的超级变量$_GET获取HTML表单(Form) 数据
2011/05/07 PHP
PHP中substr函数字符串截取用法分析
2016/01/07 PHP
PHP邮箱验证示例教程
2016/06/01 PHP
thinkphp3.2.3版本的数据库增删改查实现代码
2016/09/22 PHP
Laravel5.1框架路由分组用法实例分析
2020/01/04 PHP
jQuery总体架构的理解分析
2011/03/07 Javascript
ExpressJS入门实例
2015/01/14 Javascript
JavaScript动态添加事件之事件委托
2016/07/12 Javascript
Easyui Tree获取当前选择节点的所有顶级父节点
2017/02/14 Javascript
JS按钮闪烁功能的实现代码
2017/07/21 Javascript
完美解决axios跨域请求出错的问题
2018/02/05 Javascript
vue自定义全局共用函数详解
2018/09/18 Javascript
详解新手使用vue-router传参时注意事项
2019/06/06 Javascript
vue-dplayer 视频播放器实例代码
2019/11/08 Javascript
vue实现简单学生信息管理
2020/05/30 Javascript
解决echarts图表使用v-show控制图表显示不全的问题
2020/07/19 Javascript
Vue实现购物小球抛物线的方法实例
2020/11/22 Vue.js
Python实现信用卡系统(支持购物、转账、存取钱)
2016/06/24 Python
Python3.5局部变量与全局变量作用域实例分析
2019/04/30 Python
python图像处理模块Pillow的学习详解
2019/10/09 Python
python 实现矩阵按对角线打印
2019/11/29 Python
python实现矩阵和array数组之间的转换
2019/11/29 Python
Python函数参数分类原理详解
2020/05/28 Python
安装pyinstaller遇到的各种问题(小结)
2020/11/20 Python
皮尔·卡丹巴西官方商店:Pierre Cardin
2017/07/21 全球购物
投标人廉洁自律承诺书
2014/05/26 职场文书
中专毕业生的自荐书
2014/07/01 职场文书
班级学习雷锋活动总结
2014/07/04 职场文书
安全责任书模板
2014/07/22 职场文书
优秀党支部申报材料
2014/12/24 职场文书
订货会邀请函
2015/01/31 职场文书
财务经理岗位职责
2015/01/31 职场文书
优秀共产党员主要事迹材料
2015/11/05 职场文书
健身房被搭讪?用python写了个小米计时器助人为乐
2021/06/08 Python
Win11更新失败并提示0xc1900101
2022/04/19 数码科技