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 输出一个两行字符的变量
Feb 05 Python
python 性能提升的几种方法
Jul 15 Python
Python中强大的命令行库click入门教程
Dec 26 Python
浅析Python函数式编程
Oct 06 Python
用python求一重积分和二重积分的例子
Dec 06 Python
pytorch-RNN进行回归曲线预测方式
Jan 14 Python
Django高并发负载均衡实现原理详解
Apr 04 Python
python nohup 实现远程运行不宕机操作
Apr 16 Python
使用Python解析Chrome浏览器书签的示例
Nov 13 Python
解决selenium+Headless Chrome实现不弹出浏览器自动化登录的问题
Jan 09 Python
Python机器学习算法之决策树算法的实现与优缺点
May 13 Python
Python尝试实现蒙特卡罗模拟期权定价
Apr 21 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+javascript液晶时钟
2006/10/09 PHP
php获取用户IPv4或IPv6地址的代码
2012/11/15 PHP
关于PHP语言构造器介绍
2013/07/08 PHP
php四种基础算法代码实例
2013/10/29 PHP
php中ob_get_length缓冲与获取缓冲长度实例
2014/11/20 PHP
Zend Framework实现Zend_View集成Smarty模板系统的方法
2016/03/05 PHP
详解配置 Apache 服务器支持 PHP 文件的解析
2017/02/15 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
2019/12/18 PHP
表单填写时用回车代替TAB的实现方法
2007/10/09 Javascript
Javascript 的addEventListener()及attachEvent()区别分析
2009/05/21 Javascript
Extjs4 Treegrid 使用心得分享(经验篇)
2013/07/01 Javascript
JavaScript SetInterval与setTimeout使用方法详解
2013/11/15 Javascript
jquery1.10给新增元素绑定事件的方法
2014/03/06 Javascript
给html超链接设置事件不使用href来完成跳
2014/04/20 Javascript
基于jQuery实现最基本的淡入淡出效果实例
2015/02/02 Javascript
input点击后placeholder中的提示消息消失
2016/01/15 Javascript
Immutable 在 JavaScript 中的应用
2016/05/02 Javascript
基于JavaScript代码实现自动生成表格
2016/06/15 Javascript
简洁实用的BootStrap jQuery手风琴插件
2016/08/31 Javascript
sublime text配置node.js调试(图文教程)
2017/11/23 Javascript
在vue组件中使用axios的方法
2018/03/16 Javascript
JS动态插入脚本和插入引用外部链接脚本的方法
2018/05/21 Javascript
vue构建动态表单的方法示例
2018/09/22 Javascript
[55:48]VGJ.S vs TNC Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
Python SQLite3数据库操作类分享
2014/06/10 Python
Python学习笔记之While循环用法分析
2019/08/14 Python
python元组和字典的内建函数实例详解
2019/10/22 Python
Python有参函数使用代码实例
2020/01/06 Python
python 实用工具状态机transitions
2020/11/21 Python
摩托车和ATV零件、配件和服装的首选在线零售商:MotoSport
2017/12/22 全球购物
几个MySql的面试题
2013/04/22 面试题
自我鉴定书面格式
2014/01/13 职场文书
《从现在开始》教学反思
2014/04/15 职场文书
2015年党员自我剖析材料
2014/12/17 职场文书
高效课堂教学反思
2016/02/24 职场文书
MySQL 十大常用字符串函数详解
2021/06/30 MySQL