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查找函数f(x)=0根的解决方法
May 07 Python
Python HTTP客户端自定义Cookie实现实例
Apr 28 Python
python 寻找list中最大元素对应的索引方法
Jun 28 Python
pygame游戏之旅 调用按钮实现游戏开始功能
Nov 21 Python
详解Numpy数组转置的三种方法T、transpose、swapaxes
May 27 Python
Python画图实现同一结点多个柱状图的示例
Jul 07 Python
Django 拆分model和view的实现方法
Aug 16 Python
python 多进程队列数据处理详解
Dec 23 Python
Python异步编程之协程任务的调度操作实例分析
Feb 01 Python
Python中logging日志库实例详解
Feb 19 Python
Python如何把十进制数转换成ip地址
May 25 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
apache+mysql+php+ssl服务器之完全安装攻略
2006/09/05 PHP
php求正负数数组中连续元素最大值示例
2014/04/11 PHP
php简单实现多字节字符串翻转的方法
2015/03/31 PHP
php简单防盗链实现方法
2015/07/29 PHP
阿里云PHP SMS短信服务验证码发送方法
2017/07/11 PHP
laravel 操作数据库常用函数的返回值方法
2019/10/11 PHP
TreeView 用法(有代码)(asp.net)
2011/07/15 Javascript
从URL中提取参数与将对象转换为URL查询参数的实现代码
2012/01/12 Javascript
js实现简单登录功能的实例代码
2013/11/09 Javascript
javascript动态添加、修改、删除对象的属性与方法详解
2014/01/27 Javascript
js完美实现@提到好友特效(兼容各大浏览器)
2015/03/16 Javascript
JavaScript 变量、作用域及内存
2015/04/08 Javascript
JavaScript检测字符串中是否含有html标签实现方法
2015/07/01 Javascript
解析如何利用iframe标签以及js制作时钟
2016/12/08 Javascript
简单实现jquery焦点图
2016/12/12 Javascript
javaScript字符串工具类StringUtils详解
2017/12/08 Javascript
JS倒计时两种实现方式代码实例
2020/07/27 Javascript
浅析JavaScript预编译和暗示全局变量
2020/09/03 Javascript
Python实现Const详解
2015/01/27 Python
Python画图学习入门教程
2016/07/01 Python
Python实现文件内容批量追加的方法示例
2017/08/29 Python
python实现字符串中字符分类及个数统计
2018/09/28 Python
python3.7通过thrift操作hbase的示例代码
2020/01/14 Python
构建高效的python requests长连接池详解
2020/05/02 Python
使用jupyter notebook运行python和R的步骤
2020/08/13 Python
Python 2.6.6升级到Python2.7.15的详细步骤
2020/12/14 Python
利用html5 canvas破解简单验证码及getImageData接口应用
2013/01/25 HTML / CSS
瑞士香水购物网站:Parfumcity.ch
2017/01/14 全球购物
C#面试题问题集
2016/04/02 面试题
电子商务应届生求职信
2013/11/16 职场文书
中专生职业生涯规划书范文
2014/01/10 职场文书
十佳班主任事迹材料
2014/01/18 职场文书
产品委托授权书范本
2014/09/16 职场文书
中标通知书范本
2015/04/17 职场文书
导游词之山海关
2019/12/10 职场文书
Golang 并发下的问题定位及解决方案
2022/03/16 Golang