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获得图片base64编码示例
Jan 16 Python
在Python中使用mongoengine操作MongoDB教程
Apr 24 Python
解读python如何实现决策树算法
Oct 11 Python
Python3环境安装Scrapy爬虫框架过程及常见错误
Jul 12 Python
Django框架视图介绍与使用详解
Jul 18 Python
python快速编写单行注释多行注释的方法
Jul 31 Python
python实现的发邮件功能示例
Sep 11 Python
python被修饰的函数消失问题解决(基于wraps函数)
Nov 04 Python
linux环境下安装python虚拟环境及注意事项
Jan 07 Python
Python终端输出彩色字符方法详解
Feb 11 Python
Python 中由 yield 实现异步操作
May 04 Python
Python 如何测试文件是否存在
Jul 31 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提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
2011/02/08 PHP
table标签的结构与合并单元格的实现方法
2013/07/24 PHP
PHP的password_hash()使用实例
2014/03/17 PHP
ThinkPHP模板判断输出Empty标签用法详解
2014/06/30 PHP
PHP的mysqli_thread_id()函数讲解
2019/01/24 PHP
laravel框架分组控制器和分组路由实现方法示例
2020/01/25 PHP
js取模(求余数)隔行变色
2014/05/15 Javascript
node.js中的path.delimiter方法使用说明
2014/12/09 Javascript
JavaScript获取伪元素(Pseudo-Element)属性的方法技巧
2015/03/13 Javascript
JavaScript实现的链表数据结构实例
2015/04/02 Javascript
基于jQuery实现鼠标点击导航菜单水波动画效果附源码下载
2016/01/06 Javascript
利用node.js本地搭建HTTP服务器
2017/04/19 Javascript
在 webpack 中使用 ECharts的实例详解
2018/02/05 Javascript
详解Webstorm 下的Angular2.0开发之路(图文)
2018/12/06 Javascript
vue基础之data存储数据及v-for循环用法示例
2019/03/08 Javascript
vue在index.html中引入静态文件不生效问题及解决方法
2019/04/29 Javascript
微信小程序使用websocket通讯的demo,含前后端代码,亲测可用
2019/05/22 Javascript
详解微信小程序开发之formId使用(模板消息)
2019/08/27 Javascript
antd 表格列宽自适应方法以及错误处理操作
2020/10/27 Javascript
Vant 中的Toast设置全局的延迟时间操作
2020/11/04 Javascript
python获取文件版本信息、公司名和产品名的方法
2014/10/05 Python
python采用django框架实现支付宝即时到帐接口
2016/05/17 Python
python+tkinter编写电脑桌面放大镜程序实例代码
2018/01/16 Python
python 实现得到当前时间偏移day天后的日期方法
2018/12/31 Python
分享PyCharm的几个使用技巧
2019/11/10 Python
MyFrenchPharma中文网:最大的法国药妆平台
2016/10/07 全球购物
DJI大疆无人机官方商城:全球领先的无人飞行器研发和生产商
2016/12/21 全球购物
Jacadi Paris英国官网:法国童装品牌
2019/08/09 全球购物
大学生职业生涯规划书范文
2014/01/04 职场文书
银行求职自荐信
2014/06/30 职场文书
教师职位说明书
2014/07/29 职场文书
班级光棍节联谊会策划书
2014/10/10 职场文书
赔偿协议书
2015/01/27 职场文书
2016年质量月活动总结报告
2016/04/05 职场文书
pytorch 中nn.Dropout的使用说明
2021/05/20 Python
MySQL注入基础练习
2021/05/30 MySQL