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解析网页源代码中的115网盘链接实例
Sep 30 Python
python学习必备知识汇总
Sep 08 Python
Python实现定时精度可调节的定时器
Apr 15 Python
python Pandas 读取txt表格的实例
Apr 29 Python
PyTorch CNN实战之MNIST手写数字识别示例
May 29 Python
Python sorted函数详解(高级篇)
Sep 18 Python
对Python中list的倒序索引和切片实例讲解
Nov 15 Python
将python图片转为二进制文本的实例
Jan 24 Python
Python进阶:生成器 懒人版本的迭代器详解
Jun 29 Python
Tensorflow tf.nn.depthwise_conv2d如何实现深度卷积的
Apr 20 Python
Python grequests模块使用场景及代码实例
Aug 10 Python
超详细Python解释器新手安装教程
May 10 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
【动漫杂谈】关于《请在T台上微笑》
2020/03/03 日漫
PHP CURL获取cookies模拟登录的方法
2013/11/04 PHP
php学习笔记之面向对象
2014/11/08 PHP
php中memcache 基本操作实例
2015/05/17 PHP
php 使用fopen函数创建、打开文件详解及实例代码
2016/09/24 PHP
php5对象复制、clone、浅复制与深复制实例详解
2019/08/14 PHP
jquery插件之easing使用
2010/08/19 Javascript
Jquery封装tab自动切换效果的具体实现
2013/07/13 Javascript
js实现绿白相间竖向网页百叶窗动画切换效果
2015/03/02 Javascript
深入理解js generator数据类型
2016/08/16 Javascript
动态JavaScript所造成一些你不知道的危害
2016/09/25 Javascript
浅谈Node.js:Buffer模块
2016/12/05 Javascript
详解微信小程序Page中data数据操作和函数调用
2017/09/27 Javascript
layui表格checkbox选择全选样式及功能的实例
2018/03/07 Javascript
聊聊JS动画库 Velocity.js的使用
2018/03/13 Javascript
Makefile/cmake/node-gyp中区分判断不同平台的方法
2018/12/18 Javascript
如何提升vue.js中大型数据的性能
2019/06/21 Javascript
[48:56]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 VG vs KG
2018/03/31 DOTA
Python判断文本中消息重复次数的方法
2016/04/27 Python
python生成以及打开json、csv和txt文件的实例
2018/11/16 Python
python去除拼音声调字母,替换为字母的方法
2018/11/28 Python
Python Django2.0集成Celery4.1教程
2019/11/19 Python
在Mac中PyCharm配置python Anaconda环境过程图解
2020/03/11 Python
python程序如何进行保存
2020/07/03 Python
详解Anaconda 的安装教程
2020/09/23 Python
python实现快速文件格式批量转换的方法
2020/10/16 Python
如何用H5实现一个触屏版的轮播器的实例
2017/01/09 HTML / CSS
华硕新加坡官方网上商店:ASUS Singapore
2020/07/09 全球购物
JAVA代码查错题
2014/10/10 面试题
暑假实习求职信范文
2013/09/22 职场文书
实习教师自我鉴定
2013/12/12 职场文书
小学生学习感言
2014/03/10 职场文书
四群教育工作实施方案
2014/03/26 职场文书
自我检讨书范文
2015/01/28 职场文书
农民工工资承诺书大全
2015/05/04 职场文书
Python实现双向链表基本操作
2022/05/25 Python