Django-imagekit神奇包:自动化图像处理的安装与应用指南

网站开发中图像处理不可或缺,尤其涉及头像、用户上传的图片等。Django-ImageKit是一款强大的Django应用程序,能够与Django的model模块协同工作,自动完成图像裁剪、压缩、生成缩略图、加水印等一系列图片相关的操作,底层依赖于Pillow库。

图片[1]-Django-imagekit神奇包:自动化图像处理的安装与应用指南-山海云端论坛

一、安装配置django-imagekit

1.安装

<code>pip install pillow</code><code>pip install django-imagekit</code>

2.setting.py添加配置

<code>#settings.py</code><code> INSTALLED_APPS=[</code><code>  ...</code><code>  'imagekit',</code><code>     ...</code><code> ] </code>

完成上述步骤,即可在项目中使用 django-imagekit 来处理图片。

二、在模型中使用django-imagekit

1.models.py

上传图片并保存原图,ImageSpecField是虚拟的,不会在表中生成数据

<code>from django.db import models</code><code>from imagekit.models import ImageSpecField</code><code>from imagekit.processors import ResizeToFill</code><code><br></code><code>class Profile(models.Model):</code><code> <em>#原图</em></code><code> avatar = models.ImageField(upload_to='avatars')</code><code>    <em>#处理后保存的图</em></code><code> avatar_thumbnail = ImageSpecField(source='avatar',</code><code> processors=[ResizeToFill(100, 50)],<em># 处理后的图像大小</em></code><code> format='JPEG',<em># 处理后的图片格式</em></code><code> options={'quality': 60})<em># 处理后的图片质量</em></code>

ImageSpecFields的工作方式与Django的ImageField非常相似,不同之处在于它是基于 ImageKit。在上面的示例中,头像缩略图是头像图像的调整大小版本,保存为 JPEG 格式,带有 质量 60。

如果不保留原始图像,只想保存处理结果,可以使用ProcessedImageField类。

<code>from django.db import models</code><code>from imagekit.models import ProcessedImageField</code><code>from imagekit.processors import ResizeToFill</code><code><br></code><code>class Profile(models.Model):</code><code> avatar_thumbnail = ProcessedImageField(upload_to='avatars',</code><code> processors=[ResizeToFill(100, 50)],</code><code> format='JPEG',</code><code> options={'quality': 60})</code>

在前端使用图片

src="{{ profile.avatar_thumbnail.url }}

三、在视图中使用imagekit

将imagekit定义为模型字段是处理图像的一种非常方便的方法, 但这不是唯一的方法,有时不能或不想将字段添加到models,可以使用自定义图像类在视图中直接使用。

<code>from imagekit import ImageSpec</code><code>from imagekit.processors import ResizeToFill</code><code><br></code><code>class Thumbnail(ImageSpec):</code><code> processors = [ResizeToFill(100, 50)]</code><code> format = 'JPEG'</code><code> options = {'quality': 60}</code>

这个类能够处理图像,与上面的 ImageSpecField 完全相同。

示例

<code>source_file = open('/path/to/myimage.jpg', 'rb')</code><code>image_generator = Thumbnail(source=source_file)</code><code>result = image_generator.generate()</code>

使用自定义图像生成类,需要进行注册才可以在前端使用。

<code>from imagekit import ImageSpec, register</code><code>from imagekit.processors import ResizeToFill</code><code><br></code><code>class Thumbnail(ImageSpec):</code><code> processors = [ResizeToFill(100, 50)]</code><code> format = 'JPEG'</code><code> options = {'quality': 60}</code><code><br></code><code>register.generator('myapp:thumbnail', Thumbnail)</code>

ImageKit 会自动尝试加载一个 每个已安装的应用程序中名为“imagegenerators”的模块。

四、生成图像

ImageKit提供通用的模板标签“generateimage”,它至少需要一个参数:已注册图像生成器的 ID。其他关键字样式的参数将传递给已注册的生成器类。参考如下:

<code>{% load imagekit %}</code><code>{% generateimage 'myapp:thumbnail' source=source_file %}</code>

输出以下 HTML:

<img src="/media/CACHE/images/982d5af84cddddfd0fbf70892b4431e4.jpg" width="100" height="50" />

还可以添加其他 HTML 属性,只需使用两个破折号的关键字参数,如下:

<code>{% load imagekit %}</code><code>{% generateimage 'myapp:thumbnail' source=source_file -- alt="A picture of Me" id="mypicture" %}</code>

未生成 HTML 图像标签,该标签还用作 assignment 标记,提供对基础文件对象的访问:

<code>{% load imagekit %}</code><code><br></code><code>{% generateimage 'myapp:thumbnail' source=source_file as th %}</code><code><a href="{{ th.url }}">Click to download a cool {{ th.width }} x {{ th.height }} image!</a></code>

五、缩略

ImageKit 提供“缩略图” 模板标签:图片上传后会根据设定的参数生成处理后的图片,在前端使用调用如下代码:

<code>{% load imagekit %}</code><code><br></code><code>{% thumbnail '100x50' source_file %}</code>

与 generateimage 标签一样,thumbnail 标签输出一个 <img> 标签:

<img src="/media/CACHE/images/982d5af84cddddfd0fbf70892b4431e4.jpg" width="100" height="50" />

六、在forms中使用imagekit

除了上面的模型字段之外,还有一个forms表单字段版本的类,功能基本相同(它 处理图像一次并保存结果)。表单类:ProcessedImageField

forms.py

<code>from django import forms</code><code>from imagekit.forms import ProcessedImageField</code><code>from imagekit.processors import ResizeToFill</code><code><br></code><code>class ProfileForm(forms.Form):</code><code> avatar_thumbnail = ProcessedImageField(spec_id='myapp:profile:avatar_thumbnail',</code><code> processors=[ResizeToFill(100, 50)],</code><code> format='JPEG',</code><code> options={'quality': 60})</code>

使用和前边一样。

七、在admin中使用imagekit

<code>ImageKit 还包含一个类,用于在 Django admin中管理,AdminThumbnail 用作 Django 管理类:imagekit.admin.AdminThumbnail<br></code>

1.models方式管理

<code>from django.contrib import admin</code><code>from imagekit.admin import AdminThumbnail</code><code>from .models import Photo</code><code><br></code><code>class PhotoAdmin(admin.ModelAdmin):</code><code> list_display = ('__str__', 'admin_thumbnail')</code><code> admin_thumbnail = AdminThumbnail(image_field='thumbnail')</code><code><br></code><code>admin.site.register(Photo, PhotoAdmin)</code>

2.没有models方式管理

<code>from django.contrib import admin</code><code>from imagekit.admin import AdminThumbnail</code><code>from imagekit import ImageSpec</code><code>from imagekit.processors import ResizeToFill</code><code>from imagekit.cachefiles import ImageCacheFile</code><code><br></code><code>from .models import Photo</code><code><br></code><code>class AdminThumbnailSpec(ImageSpec):</code><code> processors = [ResizeToFill(100, 30)]</code><code> format = 'JPEG'</code><code> options = {'quality': 60 }</code><code><br></code><code>def cached_admin_thumb(instance):</code><code> <em># `image` is the name of the image field on the model</em></code><code> cached = ImageCacheFile(AdminThumbnailSpec(instance.image))</code><code> <em># only generates the first time, subsequent calls use cache</em></code><code> cached.generate()</code><code> return cached</code><code><br></code><code>class PhotoAdmin(admin.ModelAdmin):</code><code> list_display = ('__str__', 'admin_thumbnail')</code><code> admin_thumbnail = AdminThumbnail(image_field=cached_admin_thumb)</code><code><br></code><code>admin.site.register(Photo, PhotoAdmin)</code>

另外,AdminThumbnail 可以使用自定义模板。

八、图像处理器

ImageKit的功能远不止调整图像大小,而且这种功能来自其处理imagekit.processors.ResizeToFill,流程是处理器获取一个 PIL 图像对象,对其执行某些操作,然后返回一个新对象,一个规范可以使用任意数量的处理器。

该模块包含许多常见处理器 图像处理,如调整大小、旋转和颜色调整。然而 如果他们不能胜任任务,您可以创建自己的任务。

<code>from imagekit import ImageSpec</code><code>from imagekit.processors import TrimBorderColor, Adjust</code><code><br></code><code>class Watermark(object):</code><code> def process(self, image):</code><code> <em># Code for adding the watermark goes here.</em></code><code> return image</code><code><br></code><code>class MySpec(ImageSpec):</code><code> processors = [</code><code> TrimBorderColor(),</code><code> Adjust(contrast=1.2, sharpness=1.1),</code><code> Watermark(),</code><code> ]</code><code> format = 'JPEG'</code><code> options = {'quality': 60}</code>

以上为Django-ImageKit的综合使用指南,希望对您的网站图像处理需求提供全面而有效的解决方案

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容