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

yipeiwu_com7年前Python基础

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编写一个简单登录功能过程解析

需求: 写一个登录的程序, 1、最多登陆失败3次 2、登录成功,提示欢迎xx登录,今天的日期是xxx,程序结束 3、要检验输入是否为空,账号和密码不能为空 4、账号不区分大小写...

老生常谈Python startswith()函数与endswith函数

函数:startswith() 作用:判断字符串是否以指定字符或子字符串开头 一、函数说明 语法:string.startswith(str, beg=0,end=len(string)...

分析python动态规划的递归、非递归实现

概要 本文只是简单的介绍动态规划递归、非递归算法实现 案例一 题目一:求数组非相邻最大和 [题目描述] 在一个数组arr中,找出一组不相邻的数字,使得最后的和最大。 [示例输入]...

Python基于回溯法子集树模板解决旅行商问题(TSP)实例

Python基于回溯法子集树模板解决旅行商问题(TSP)实例

本文实例讲述了Python基于回溯法子集树模板解决旅行商问题(TSP)。分享给大家供大家参考,具体如下: 问题 旅行商问题(Traveling Salesman Problem,TSP)...

Python+Opencv识别两张相似图片

Python+Opencv识别两张相似图片

在网上看到python做图像识别的相关文章后,真心感觉python的功能实在太强大,因此将这些文章总结一下,建立一下自己的知识体系。 当然了,图像识别这个话题作为计算机科学的一个分支,不...