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 的区别的主要内容,如果未能解决你的问题,请参考以下文章