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读取图片EXIF信息类库介绍和使用实例
Jul 10 Python
python 接口_从协议到抽象基类详解
Aug 24 Python
python 拷贝特定后缀名文件,并保留原始目录结构的实例
Apr 27 Python
python使用turtle库绘制时钟
Mar 25 Python
解决Shell执行python文件,传参空格引起的问题
Oct 30 Python
在python中实现将一张图片剪切成四份的方法
Dec 05 Python
Python实现点阵字体读取与转换的方法
Jan 29 Python
Python中单线程、多线程和多进程的效率对比实验实例
May 14 Python
python 环境搭建 及python-3.4.4的下载和安装过程
Jul 20 Python
python爬虫 urllib模块发起post请求过程解析
Aug 20 Python
Python3批量移动指定文件到指定文件夹方法示例
Sep 02 Python
学python安装的软件总结
Oct 12 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
ajax php 实现写入数据库
2009/09/02 PHP
PHP5全版本绕过open_basedir读文件脚本漏洞详细介绍
2015/01/20 PHP
php文件类型MIME对照表(比较全)
2016/10/07 PHP
PHP 芝麻信用接入的注意事项
2016/12/01 PHP
PHP实现负载均衡下的session共用功能
2018/04/17 PHP
Extjs gridpanel 出现横向滚动条问题的解决方法
2011/07/04 Javascript
在js文件中如何获取basePath处理js路径问题
2013/07/10 Javascript
jquery为页面增加快捷键示例
2014/01/31 Javascript
javascript中定义类的方法汇总
2014/12/28 Javascript
jQuery实现带水平滑杆的焦点图动画插件
2016/03/08 Javascript
jQuery的ajax中使用FormData实现页面无刷新上传功能
2017/01/16 Javascript
js模拟百度模糊搜索的实例
2017/08/04 Javascript
vue2.0 常用的 UI 库实例讲解
2017/12/12 Javascript
webpack+vue2构建vue项目骨架的方法
2018/01/09 Javascript
Node.js静态服务器的实现方法
2018/02/28 Javascript
Nodejs把接收图片base64格式保存为文件存储到服务器上
2018/09/26 NodeJs
JS 实现获取验证码 倒计时功能
2018/10/29 Javascript
JavaScript获取页面元素的常用方法详解
2019/09/28 Javascript
jQuery 图片查看器插件 Viewer.js用法简单示例
2020/04/04 jQuery
[54:24]Optic vs TNC 2018国际邀请赛小组赛BO2 第二场
2018/08/18 DOTA
python删除过期文件的方法
2015/05/29 Python
Python 的描述符 descriptor详解
2016/02/27 Python
python实现列表中由数值查到索引的方法
2018/06/27 Python
python数据挖掘需要学的内容
2019/06/23 Python
如何通过雪花算法用Python实现一个简单的发号器
2019/07/03 Python
python元组拆包实现方法
2021/02/28 Python
python Protobuf定义消息类型知识点讲解
2021/03/02 Python
西尔斯百货官网:Sears
2016/09/06 全球购物
美的官方商城:Midea
2016/09/14 全球购物
绘儿乐产品官方在线商店:Crayola.com
2019/09/07 全球购物
证婚人搞笑证婚词
2014/01/10 职场文书
开学典礼感言
2014/02/16 职场文书
四风问题原因分析及整改措施
2014/10/24 职场文书
铁人纪念馆观后感
2015/06/16 职场文书
《西门豹》教学反思
2016/02/23 职场文书
React 高阶组件HOC用法归纳
2021/06/13 Javascript