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的Flask框架中实现分页功能的教程
Apr 20 Python
使用Python实现博客上进行自动翻页
Aug 23 Python
深入浅析Python2.x和3.x版本的主要区别
Nov 30 Python
windows下安装Python虚拟环境virtualenvwrapper-win
Jun 14 Python
python实现百度OCR图片识别过程解析
Jan 17 Python
python操作docx写入内容,并控制文本的字体颜色
Feb 13 Python
Anaconda的安装及其环境变量的配置详解
Apr 22 Python
Python-jenkins模块之folder相关操作介绍
May 12 Python
Python读取二进制文件代码方法解析
Jun 22 Python
如何基于matlab相机标定导出xml文件
Nov 02 Python
Python调用飞书发送消息的示例
Nov 10 Python
浅谈Python中对象是如何被调用的
Apr 06 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 var_dump遍历对象属性的函数与应用代码
2010/06/04 PHP
php设计模式 Singleton(单例模式)
2011/06/26 PHP
在PHP上显示JFreechart画的统计图方法
2013/11/03 PHP
PHP简单实现冒泡排序的方法
2016/12/26 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
2017/08/28 PHP
laravel ORM 只开启created_at的几种方法总结
2018/01/29 PHP
PHP防止sql注入小技巧之sql预处理原理与实现方法分析
2019/12/13 PHP
js CSS操作方法集合
2008/10/31 Javascript
js操作select控件的几种方法
2010/06/02 Javascript
js中的replace方法使用介绍
2013/10/28 Javascript
Javascript玩转继承(一)
2014/05/08 Javascript
javascript修改图片src的方法
2015/01/27 Javascript
原生JS:Date对象全面解析
2016/09/06 Javascript
Nodejs进阶:基于express+multer的文件上传实例
2016/11/21 NodeJs
关于javascript事件响应的基础语法总结(必看篇)
2016/12/26 Javascript
jquery实现tab选项卡切换效果(悬停、下方横线动画位移)
2017/05/05 jQuery
vue项目中使用ueditor的实例讲解
2018/03/05 Javascript
ES6 中可以提升幸福度的小功能
2018/08/06 Javascript
Vue CLI 3搭建vue+vuex最全分析(推荐)
2018/09/27 Javascript
在create-react-app中使用sass的方法示例
2018/10/01 Javascript
node获取客户端ip功能简单示例
2019/08/24 Javascript
[52:08]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第一局
2016/03/05 DOTA
Python实现多线程抓取妹子图
2015/08/08 Python
Mac下Anaconda的安装和使用教程
2018/11/29 Python
全面了解django的缓存机制及使用方法
2019/07/22 Python
python-Web-flask-视图内容和模板知识点西宁街
2019/08/23 Python
Django自定义用户表+自定义admin后台中的字段实例
2019/11/18 Python
VSCode基础使用与VSCode调试python程序入门的图文教程
2020/03/30 Python
python爬虫如何解决图片验证码
2021/02/14 Python
HTML5图片预览实例分享
2014/06/04 HTML / CSS
村容村貌整治方案
2014/05/21 职场文书
销售求职信范文
2014/05/26 职场文书
实习指导教师评语
2014/12/30 职场文书
2016年世界人口日宣传活动总结
2016/04/05 职场文书
Python Flask搭建yolov3目标检测系统详解流程
2021/11/07 Python
《黑岩★★射手 DAWN FALL》BD发售宣传CM公开
2022/04/04 日漫