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 相关文章推荐
wxpython 学习笔记 第一天
Feb 09 Python
使用python编写批量卸载手机中安装的android应用脚本
Jul 21 Python
Python编程入门的一些基本知识
May 13 Python
定制FileField中的上传文件名称实例
Aug 23 Python
python自动截取需要区域,进行图像识别的方法
May 17 Python
Python正则表达式指南 推荐
Oct 09 Python
Python3之手动创建迭代器的实例代码
May 22 Python
python实现对象列表根据某个属性排序的方法详解
Jun 11 Python
Python3实现汉语转换为汉语拼音
Jul 08 Python
Python如何实现爬取B站视频
May 20 Python
python要安装在哪个盘
Jun 15 Python
python中的sys模块和os模块
Mar 20 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命名空间(Namespace)简明教程
2014/06/11 PHP
linux下编译安装memcached服务
2014/08/03 PHP
关于恒等于(===)和非恒等于(!==)
2007/08/20 Javascript
window.location.hash 属性使用说明
2010/03/20 Javascript
关于jQuery中的end()使用方法
2011/07/10 Javascript
javascript学习笔记(十八) 获得页面中的元素代码
2012/06/20 Javascript
jQuery插件ajaxFileUpload实现异步上传文件效果
2015/04/14 Javascript
详解JavaScript中的表单验证
2015/06/16 Javascript
Backbone.js框架中Model与Collection的使用实例
2016/05/07 Javascript
JavaScript比较当前时间是否在指定时间段内的方法
2016/08/02 Javascript
ReactNative-JS 调用原生方法实例代码
2016/10/08 Javascript
使用JSON作为函数的参数的优缺点
2016/10/27 Javascript
bootstrap轮播图示例代码分享
2017/05/17 Javascript
浅谈一种让小程序支持JSX语法的新思路
2019/06/16 Javascript
JQuery 实现文件下载的常用方法分析
2019/10/29 jQuery
nodejs实现百度舆情接口应用示例
2020/02/07 NodeJs
js最全的数组的降维5种办法(小结)
2020/04/28 Javascript
vue使用svg文件补充-svg放大缩小操作(使用d3.js)
2020/09/22 Javascript
JavaScript中常用的3种弹出提示框(alert、confirm、prompt)
2020/11/10 Javascript
[01:13]DOTA2群星解读国服召集令 一起说出回归的理由
2013/07/17 DOTA
[02:04]2014DOTA2国际邀请赛 BBC小组赛第三天总结
2014/07/12 DOTA
Python中的pprint折腾记
2015/01/21 Python
简要讲解Python编程中线程的创建与锁的使用
2016/02/28 Python
解决python中 f.write写入中文出错的问题
2018/10/31 Python
Python 200行代码实现一个滑动验证码过程详解
2019/07/11 Python
python3连接mysql获取ansible动态inventory脚本
2020/01/19 Python
python读取图片颜色值并生成excel像素画的方法实例
2021/02/19 Python
HTML5 b和i标记将被赋予真正的语义
2009/07/16 HTML / CSS
美国著名的团购网站:Woot
2016/08/02 全球购物
Skyscanner波兰:廉价航班
2017/11/07 全球购物
物流业务员岗位职责
2015/04/03 职场文书
2015年公路养护工作总结
2015/05/13 职场文书
地雷战观后感
2015/06/09 职场文书
2019大学生实习报告
2019/06/21 职场文书
管理者日常工作必备:22条企业管理流程模板!
2019/07/12 职场文书
PostgreSQL基于pgrouting的路径规划处理方法
2022/04/18 PostgreSQL