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批量修改文件后缀示例代码分享
Dec 24 Python
Python中对列表排序实例
Jan 04 Python
Flask框架的学习指南之制作简单blog系统
Nov 20 Python
python实现单线程多任务非阻塞TCP服务端
Jun 13 Python
解决python中画图时x,y轴名称出现中文乱码的问题
Jan 29 Python
解决Django连接db遇到的问题
Aug 29 Python
python如何通过twisted搭建socket服务
Feb 03 Python
django之从html页面表单获取输入的数据实例
Mar 16 Python
python PIL模块的基本使用
Sep 29 Python
python动态规划算法实例详解
Nov 22 Python
Python基于argparse与ConfigParser库进行入参解析与ini parser
Feb 02 Python
python状态机transitions库详解
Jun 02 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
DC四月将推出百页特刊漫画 纪念小丑诞生80周年
2020/04/09 欧美动漫
php ob_flush,flush在ie中缓冲无效的解决方法
2010/05/09 PHP
PHP原生模板引擎 最简单的模板引擎
2012/04/25 PHP
php构造方法中析构方法在继承中的表现
2016/04/12 PHP
smarty模板的使用方法实例分析
2019/09/18 PHP
PHP语言对接抖音快手小红书视频/图片去水印API接口源码
2020/08/11 PHP
Using the TextRange Object
2006/10/14 Javascript
jqGrid增加时--判断开始日期与结束日期(实例解析)
2013/11/08 Javascript
浅谈EasyUI中Treegrid节点的删除
2015/03/01 Javascript
使用JavaScript为Kindeditor自定义按钮增加Audio标签
2016/03/18 Javascript
JavaScript每天必学之数组和对象部分
2016/09/17 Javascript
javascript实现秒表计时器的制作方法
2017/02/16 Javascript
原生JS实现跑马灯效果
2017/02/20 Javascript
详解用webpack2搭建angular2的项目
2017/06/22 Javascript
js统计页面上每个标签的数量实例代码
2018/05/29 Javascript
vue构建动态表单的方法示例
2018/09/22 Javascript
vue使用better-scroll实现下拉刷新、上拉加载
2018/11/23 Javascript
JS实现瀑布流效果
2020/03/07 Javascript
javascript设计模式 ? 解释器模式原理与用法实例分析
2020/04/17 Javascript
[02:21]DOTA2英雄基础教程 蝙蝠骑士
2013/12/16 DOTA
[05:08]2014DOTA2国际邀请赛 Hao专访复仇的胜利很爽
2014/07/15 DOTA
Python基本数据类型详细介绍
2014/03/11 Python
python基础教程之对象和类的实际运用
2014/08/29 Python
Python实现求两个数组交集的方法示例
2019/02/23 Python
Python解析多帧dicom数据详解
2020/01/13 Python
Python数据可视化实现多种图例代码详解
2020/07/14 Python
彻底搞懂python 迭代器和生成器
2020/09/07 Python
python利用tkinter实现图片格式转换的示例
2020/09/28 Python
Muziker英国:中欧最大的音乐家商店
2020/02/05 全球购物
岗位职责的定义
2013/11/10 职场文书
数据管理员的自我评价分享
2013/11/15 职场文书
政协委员个人总结
2015/03/03 职场文书
刑事上诉状(无罪)
2015/05/23 职场文书
人生遥控器观后感
2015/06/11 职场文书
《全神贯注》教学反思
2016/02/22 职场文书
创业计划书之家教中心
2019/09/25 职场文书