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 相关文章推荐
利用打码兔和超人打码自封装的打码类分享
Mar 16 Python
零基础写python爬虫之爬虫框架Scrapy安装配置
Nov 06 Python
Python3.2中的字符串函数学习总结
Apr 23 Python
Pythont特殊语法filter,map,reduce,apply使用方法
Feb 27 Python
分享python数据统计的一些小技巧
Jul 21 Python
python中列表的切片与修改知识点总结
Jul 23 Python
对python中url参数编码与解码的实例详解
Jul 25 Python
python和pywin32实现窗口查找、遍历和点击的示例代码
Apr 01 Python
Keras实现将两个模型连接到一起
May 23 Python
python3+opencv 使用灰度直方图来判断图片的亮暗操作
Jun 02 Python
Python3如何使用range函数替代xrange函数
Oct 05 Python
基于python实现坦克大战游戏
Oct 27 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实现的mongoDB数据库操作类完整实例
2018/04/10 PHP
Laravel6.0.4中将添加计划任务事件的方法步骤
2019/10/15 PHP
关于捕获用户何时点击window.onbeforeunload的取消事件
2011/03/06 Javascript
JavaScript版TAB选项卡效果实例
2013/08/16 Javascript
改变隐藏的input中value的值代码
2013/12/30 Javascript
关闭页面window.location事件未执行的原因及解决方法
2014/09/01 Javascript
jQuery回调函数的定义及用法实例
2014/12/23 Javascript
jQuery实现移动端滑块拖动选择数字效果
2015/12/24 Javascript
javascript的 {} 语句块详解
2016/02/27 Javascript
Json解析的方法小结
2016/06/22 Javascript
javascript类型系统_正则表达式RegExp类型详解
2016/06/24 Javascript
js+css3制作时钟特效
2016/10/16 Javascript
解析预加载显示图片艺术
2016/12/05 Javascript
修改Nodejs内置的npm默认配置路径方法
2018/05/13 NodeJs
Vue可自定义tab组件用法实例
2019/10/24 Javascript
Egg Vue SSR 服务端渲染数据请求与asyncData
2019/11/24 Javascript
ant-design-vue 快速避坑指南(推荐)
2020/01/21 Javascript
jquery实现进度条状态展示
2020/03/26 jQuery
JS实现省市县三级下拉联动
2020/04/10 Javascript
解析Python编程中的包结构
2015/10/25 Python
numpy.ndarray 交换多维数组(矩阵)的行/列方法
2018/08/02 Python
Python神奇的内置函数locals的实例讲解
2019/02/22 Python
如何使用Python自动控制windows桌面
2019/07/11 Python
解决python3.6用cx_Oracle库连接Oracle的问题
2020/12/07 Python
HTML5计时器小例子
2013/10/15 HTML / CSS
HTML5 Canvas实现图片缩放、翻转、颜色渐变的代码示例
2016/02/28 HTML / CSS
全球知名提供各类营养保健品的零售商:Vitamin Shoppe
2016/10/09 全球购物
数控专业个人求职信范例
2013/11/29 职场文书
实习生个人的自我评价
2013/12/08 职场文书
远程研修随笔感言
2014/02/10 职场文书
2014年女职工工作总结
2014/11/27 职场文书
公司财务部岗位职责
2015/04/14 职场文书
文艺节目主持词
2015/07/06 职场文书
消防宣传语大全
2015/07/13 职场文书
出纳2015年度工作总结范文
2015/10/14 职场文书