服务端图片处理神器Django-imagekit介绍

        无论是做哪种业务,但凡是涉及到图片的,一定会有裁图的需求。但是裁图的需求又分好几种,主要的两种是:一种是被动裁图,可以裁出各种尺寸或限定的几种尺寸;另外一种是主动裁图,裁出固定的几种尺寸。

     以前是用nignx的一个裁图模块image_filter根据URL的参数来裁图,比方说,有原图:/images/fire.png, 通过请求 /images/fire.png/30x30 就可以得到一个90x90的方图,这是被动裁图只有接收到用户请求之后才处理图片。再就是程序先自动去请求一遍。这种方式的另外一种做法就是自己在程序中裁图,对于读多写少的应用来说还挺合适。

   python中怎么搞呢?Pillow当然可以,它很强大我做图像处理也经常用到Pillow。如果在Django中处理,那就要考虑是不是有人已经在Pillow上做好了更符合Django流程的封装了,Django-imagekit就是这么个东西!真的是裁图神器!!!!!

1. 安装

要在 Django 使用 ImageField 模块,必须先安装第三方库 Pillow然后才能安装django-imagekit:

pip install pillow
pip install django-imagekit

完成上述步骤后,在 Django 项目的 settings.py 文件中的 INSTALLED_APPS 添加上: 'imagekit'

现在准备工作全部完成,可以在项目中使用 django-imagekit 来处理图片了。

然后你要更改你的models.py

from django.db import models
from imagekit.models import ImageSpecField,ProcessedImageField
from imagekit.processors import ResizeToFill


class ImInfo(models.Model):
    # 原图片在项目中存储的相对路径
    imgpic = models.ImageField(verbose_name="图片路径", default="image/default.png", upload_to='DF_goods/Image/%Y/%m', null=True, blank=True)  # 商品图片
    # 方式一:
    imgpic_30x30 =ImageSpecField(
        # 原图
        source='imgpic',
        # 处理后的图像大小
        processors=[ResizeToFill(30, 30)],
        # 处理后的图片格式
        format='JPEG',
        # 处理后的图片质量
        options={'quality': 90}
    )
    # 方式二:
    imgpic_90x90 =ProcessedImageField(
        upload_to='DF_goods/Image/%Y/%m',
        processors=[ResizeToFill(90, 90)],
        format='JPEG',
        options={'quality': 90}
    )

    class Meta:
        db_table = 'img'  # 指明数据库表名
        verbose_name = '图片'  # 在admin站点中显示的名称
        verbose_name_plural = verbose_name  # 显示的复数名称

可以看到我写了两种方式 ImageSpecField,ProcessedImageField。这两个有何区别呢?

          方式二与我们之前的方式一非常相似。由于我们不处理另一个图像字段,因此不再需要指定“源”,但是我们确实需要传递“ upload_to”参数。这与Django ImageFields的行为完全相同。

          ImageSpecFields是虚拟的,它们不向您的数据库添加任何字段,也不需要数据库。由于很多原因,这很方便,但这意味着需要基于源图像和规范以编程方式构造图像文件的路径。

          ProcessedImageFields确实与ImageFields一样,它们将文件路径保存在数据库中,并且在向模型中添加一个时需要运行syncdb(或创建迁移)。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值