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实现的重启关机程序实例
Aug 21 Python
在Python的Flask框架下收发电子邮件的教程
Apr 21 Python
python对数组进行反转的方法
May 20 Python
Python 模板引擎的注入问题分析
Jan 01 Python
python的numpy模块安装不成功简单解决方法总结
Dec 23 Python
django加载本地html的方法
May 27 Python
python科学计算之scipy——optimize用法
Nov 25 Python
python利用opencv实现SIFT特征提取与匹配
Mar 05 Python
Python使用进程Process模块管理资源
Mar 05 Python
Python figure参数及subplot子图绘制代码
Apr 18 Python
python获得命令行输入的参数的两种方式
Nov 02 Python
Python 中的单分派泛函数你真的了解吗
Jun 22 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变量的定义、可变变量、变量引用、销毁方法
2013/12/20 PHP
php利用imagemagick实现复古老照片效果实例
2017/02/16 PHP
php实现文章评论系统
2019/02/18 PHP
js 获取input点选按钮的值的方法
2014/04/14 Javascript
JavaScript+CSS实现仿Mootools竖排弹性动画菜单效果
2015/10/14 Javascript
Markdown+Bootstrap图片自适应属性详解
2016/05/21 Javascript
JS实现简易刻度时钟示例代码
2017/03/11 Javascript
VUE实现一个分页组件的示例
2017/09/13 Javascript
js实现简单数字变动效果
2017/11/06 Javascript
禁止弹窗中蒙层底部页面跟随滚动的几种方法
2017/12/07 Javascript
vue通过style或者class改变样式的实例代码
2018/10/30 Javascript
JavaScript简单实现动态改变HTML内容的方法示例
2018/12/25 Javascript
在vue项目中使用Jquery-contextmenu插件的步骤讲解
2019/01/27 jQuery
9102了,你还不会移动端真机调试吗
2019/03/25 Javascript
请求时token过期自动刷新token操作
2020/09/11 Javascript
Python批量提取PDF文件中文本的脚本
2018/03/14 Python
python3 requests中使用ip代理池随机生成ip的实例
2018/05/07 Python
Django框架首页和登录页分离操作示例
2019/05/28 Python
selenium+python环境配置教程详解
2019/05/28 Python
Python高级特性 切片 迭代解析
2019/08/23 Python
Django models filter筛选条件详解
2020/03/16 Python
解决python ThreadPoolExecutor 线程池中的异常捕获问题
2020/04/08 Python
opencv+pyQt5实现图片阈值编辑器/寻色块阈值利器
2020/11/13 Python
python基于Kivy写一个图形桌面时钟程序
2021/01/28 Python
CSS3 border-radius圆角的实现方法及用法详解
2020/09/14 HTML / CSS
SKECHERS官方旗舰店:美国舒适运动休闲品牌
2017/12/22 全球购物
美国最佳在线航班预订网站:LookupFare
2019/03/26 全球购物
深圳茁壮笔试题
2015/05/28 面试题
关于成绩下滑的自我检讨书
2014/09/20 职场文书
基层党员四风问题自我剖析材料
2014/09/29 职场文书
党的作风建设心得体会
2014/10/22 职场文书
2014年招商工作总结
2014/11/22 职场文书
酒店工程部经理岗位职责
2015/04/09 职场文书
周一给客户的问候语
2015/11/10 职场文书
Golang中异常处理机制详解
2021/06/08 Golang
Python 快速验证代理IP是否有效的方法实现
2021/07/15 Python