Django 使用easy_thumbnails压缩上传的图片方法


Posted in Python onJuly 26, 2019

easy_thumbnails:A powerful, yet easy to implement thumbnailing application for Django 1.4+

安装

pip install easy_thumbanils

在你的项目中配置

setting.py INSTALLED_APPS中添加 ‘easy_thumbanils'

如果Django1.7及以上,运行python manage.py migrate easy_thumbnails

否则,运行python manage.py syncdb

在Django中压缩

setting.py

首先,setting中添加

THUMBNAIL_ALIASES = {
 '': {
  'avatar': {'size': (200, 200), 'crop': True},
 },
}

size控制要压缩后的图片大小

创建模型

eg:

models.py

from easy_thumbnails.fields import ThumbnailerImageField

class GoodsImage(models.Model):
 Img = ThumbnailerImageField(upload_to='images/',blank=True)

ThumbnailerImageField在数据库中做的事相当于models.ImageField,不同的是他会告诉esay_thumbnails这是一个要被压缩的图片域。(个人推测)

获取缩略图路径

两种,一是在模板中,二在视图中

模板:

views.py

from models import GoodsImage
def test(request):
 goods = GoodsMessage.objects.all().first() # 查到一个图片
 return render(request,'templates.html',{'img':goods}) # 使用模板

templates.html

{% load thumbnail %} {# 装载easy_thumbnail #}
<img src="/media/{{ img.Img }}"> {# 原图 #}
<img src="/media/{{ img.Img.avatar.url }}"> {# 压缩图 #}

视图

views.py

from easy_thumbnails.files import get_thumbnailer
from models import GoodsImage
def test2(request):
 goods = GoodsImage.objects.all().first()
 path = get_thumbnailer(goods.Img)
 print(path) # 注意,这里查到的是url编码的图片地址
 return HttpResponse(path)

第二种方法,直接查找:

goods = GoodsImage.objects.all().first()
goods.Img # 原图地址
goods.Img['avatar'] # 缩略图地址
goods.Img['avatar'].url # 经url编码后的缩略图地址
# avatar是你在setting.py中的缩略图尺寸名

根据我的观察,只有当第一次使用 GoodsImage.object.*()这种查询的时候,才会生成缩略图,并非在保存原图时就生成了。

此外,使用时候发现当图片表一条记录被删除后,thumbanils的数据表记录不会删除,不过在使用中未发现异常

以上这篇Django 使用easy_thumbnails压缩上传的图片方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用xmlrpc实例讲解
Dec 17 Python
Python随机生成数模块random使用实例
Apr 13 Python
python3爬取各类天气信息
Feb 24 Python
基于python进行桶排序与基数排序的总结
May 29 Python
tensorflow实现图像的裁剪和填充方法
Jul 27 Python
Django压缩静态文件的实现方法详析
Aug 26 Python
PyCharm代码回滚,恢复历史版本的解决方法
Oct 22 Python
pyshp创建shp点文件的方法
Dec 31 Python
深入浅析python 协程与go协程的区别
May 09 Python
python类中super() 的使用解析
Dec 19 Python
Python列表的深复制和浅复制示例详解
Feb 12 Python
Python3 多线程(连接池)操作MySQL插入数据
Jun 09 Python
解决django服务器重启端口被占用的问题
Jul 26 #Python
深入解析神经网络从原理到实现
Jul 26 #Python
python单例模式的多种实现方法
Jul 26 #Python
django的ORM操作 增加和查询
Jul 26 #Python
Django在pycharm下修改默认启动端口的方法
Jul 26 #Python
Python解析命令行读取参数之argparse模块
Jul 26 #Python
Django Rest framework三种分页方式详解
Jul 26 #Python
You might like
YB217、YB235、YB400浅听
2021/03/02 无线电
php数组函数序列之array_splice() - 在数组任意位置插入元素
2011/11/07 PHP
php字符串截取的简单方法
2013/07/04 PHP
Linux下安装PHP MSSQL扩展教程
2014/10/24 PHP
PHP新特性之字节码缓存和内置服务器
2017/08/11 PHP
jquery控制listbox中项的移动并排序的实现代码
2010/09/28 Javascript
Jquery解析json数据详解
2013/12/26 Javascript
Javascript中的数组常用方法解析
2016/06/17 Javascript
jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)
2016/06/28 Javascript
JavaScript实现替换字符串中最后一个字符的方法
2017/03/07 Javascript
简单谈谈原生js的math对象
2017/06/27 Javascript
前端html中jQuery实现对文本的搜索功能并把搜索相关内容显示出来
2017/11/14 jQuery
JS中获取 DOM 元素的绝对位置实例详解
2018/04/23 Javascript
JavaScript设计模式之构造器模式(生成器模式)定义与用法实例分析
2018/07/26 Javascript
微信小程序Flex布局用法深入浅出分析
2019/04/25 Javascript
JS实现选项卡效果的代码实例
2019/05/20 Javascript
JS中循环遍历数组的四种方式总结
2021/01/23 Javascript
Python3通过Luhn算法快速验证信用卡卡号的方法
2015/05/14 Python
Python2.x利用commands模块执行Linux shell命令
2016/03/11 Python
老生常谈Python序列化和反序列化
2017/06/28 Python
MySQL适配器PyMySQL详解
2017/09/20 Python
读取json格式为DataFrame(可转为.csv)的实例讲解
2018/06/05 Python
对Python闭包与延迟绑定的方法详解
2019/01/07 Python
python打包exe开机自动启动的实例(windows)
2019/06/28 Python
如何基于python实现脚本加密
2019/12/28 Python
接口自动化多层嵌套json数据处理代码实例
2020/11/20 Python
使用CSS3的box-sizing属性解决div宽高被内边距撑开的问题
2016/06/28 HTML / CSS
伦敦眼门票在线预订:London Eye
2018/05/31 全球购物
美国隐形眼镜零售商:LensPure
2019/03/10 全球购物
金融行业务员的自我评价
2013/12/13 职场文书
教师研修随笔感言
2014/01/23 职场文书
公司年会主持词
2014/03/22 职场文书
毕业论文致谢信
2015/05/14 职场文书
vue-cropper组件实现图片切割上传
2021/05/27 Vue.js
Python办公自动化之教你用Python批量识别发票并录入到Excel表格中
2021/06/26 Python
JVM的类加载器和双亲委派模式你了解吗
2022/03/13 Java/Android