Django 简单缩略图与 sorl-thumbnail 的区别

Posted

技术标签:

【中文标题】Django 简单缩略图与 sorl-thumbnail 的区别【英文标题】:Django easy-thumbnails vs sorl-thumbnail differences 【发布时间】:2016-05-10 12:36:59 【问题描述】:

我一直在阅读并尝试各种适用于 Django 的缩略图应用程序。这些是要求:

所有生成的缩略图都必须保存在与原始图像分开的 S3 存储桶中,即单独的存储类

当图片实例被删除时,原始图片文件连同所有生成的缩略图也必须被删除

尽量减少代价高昂的低效率,例如。获取要在 DRF 中序列化的缩略图的 url 不应该每次都在 S3 存储桶中查看它是否存在等。

VersatileImageField 未能满足第一个要求。 ImageKit 未能满足第二个要求。第三个要求是我最困惑的地方;我试图让自己了解最佳做法,但信息不完整,我没有信心根据目前所学的知识做出决定。

根据我的阅读,我的印象是最有效的行为如下:

保存后立即生成缩略图并假定它始终存在 要访问缩略图,请根据原始图像的文件名和缩略图尺寸/质量生成 URL,因为我们知道它肯定存在 post_delete 将删除所有缩略图和原始文件

我最感兴趣的是了解 easy-thumbnails 和 sorl-thumbnail 采用的方法的差异(如果它们与我在上面简要概述的过程一致,或者如果它们有更有效的方法),以及每种方法的优点/缺点。

【问题讨论】:

你是怎么解决你的问题的? @weisson 我尝试了所有这三个应用程序,但都不完美且过于固执己见(没有其他方法可以解决)。我正在使用带有 pica.js 的客户端缩略图。图片 blob 直接上传到 S3,不需要 ImageField 或枕头。 现在是 2020 年,我也遇到了同样的问题。每次我必须将图像添加到项目中时,我都会因此而有一种不好的感觉。 【参考方案1】:

我希望这可以帮助你 在模型中,有图像和缩略图两个字段,在视图中验证图像类型和大小,然后使用 Pill 生成缩略图

from PIL import Image as Img
from io import BytesIO

def create(self,request):
    mutable = request.POST._mutable
    request.POST._mutable = True

    for value in request.FILES.items():
        im = Img.open(value[1])
        im.thumbnail((425, 236), Img.ANTIALIAS)
        buffer = BytesIO()
        im.save(fp=buffer, format='JPEG')

        requset.POST['thumbnail'] = ContentFile(buffer.getvalue(), thumnail_name)

     request.POST._mutable = mutable

要将图像保存在文件夹和缩略图另一个文件夹中,您可以在 ImageField 中使用与 upload_to 不同的路径

【讨论】:

【参考方案2】:

我不确定这是否有帮助,但我过去曾使用过简单的缩略图,而且我相当确定,只要稍微配置一下,它就能满足您的所有要求。使用保存功能配置它有点棘手,因为保存功能不需要配置,但这并非不可能。可能导致问题的主要原因是您必须使用“保存并继续编辑”来访问和使用缩略图选项。如果您尚未创建它,因为它是在保存时创建的,除非您这样做,否则它将不可见。

def save()
    found_id = self.id
        super(Team, self).save(*args, **kwargs)
        if self.image and found_id is None and self.original_image_width and self.original_image_height:
            self.image = get_thumbnailer(self.image).get_thumbnail(
                'size': (self.original_image_width, self.original_image_height)
            ).name
        super(Team, self).save(*args, **kwargs)

【讨论】:

能否提供一个示例 sn-p 代码,说明如何配置保存功能,以及如何使用“保存并继续编辑”?谢谢。 基本上,“保存并继续编辑”会发生什么,保存功能会生成easy_thumbnails url 您基本上可以为原始图像的宽度和高度创建选项,以及为缩略图创建相同的选项,以及一个图像上传器和用于将缩略图存储在模型中的部分

以上是关于Django 简单缩略图与 sorl-thumbnail 的区别的主要内容,如果未能解决你的问题,请参考以下文章

text 缩略图与悬停过渡

Django缩略图,简单

动态创建图像缩略图(使用 django)

[UE4]计算小地图比例尺

如何使用 django 为视频创建缩略图?

Django 管理员并显示缩略图