Django简易缩略图与Soll缩略图的区别
我一直在阅读并尝试各种Django的缩略图应用程序。这些是要求:Django简易缩略图与Soll缩略图的区别,django,sorl-thumbnail,django-imagekit,easy-thumbnails,Django,Sorl Thumbnail,Django Imagekit,Easy Thumbnails,我一直在阅读并尝试各种Django的缩略图应用程序。这些是要求: 所有生成的缩略图必须保存在与原始图像分开的S3存储桶中,即单独的存储类 删除图像实例时,还必须删除原始图像文件以及所有生成的缩略图 最大限度地降低昂贵的低效率,例如,获取缩略图的url以在DRF中序列化,不应该每次都查看S3 bucket以查看它是否存在,等等 VersatileImageField未满足第一个要求。ImageKit不符合第二个要求。第三个要求是我最困惑的地方;我试图让自己了解最佳实践,但信息是零碎的,我没有信
- 所有生成的缩略图必须保存在与原始图像分开的S3存储桶中,即单独的存储类
- 删除图像实例时,还必须删除原始图像文件以及所有生成的缩略图
- 最大限度地降低昂贵的低效率,例如,获取缩略图的url以在DRF中序列化,不应该每次都查看S3 bucket以查看它是否存在,等等
- 保存后立即生成缩略图,并假定它始终存在
- 要访问缩略图,请根据原始图像的文件名和缩略图尺寸/质量生成URL,因为我们知道它确实存在
- post_delete将删除所有缩略图和原始文件
我最感兴趣的是了解easy thumbnail和sorl thumbnail采用的方法的差异(如果它们与我上面简要介绍的过程一致,或者它们有更有效的方法),以及它们各自方法的优缺点。我不确定这是否有用,但我在过去使用过简单的缩略图,我敢肯定,如果您稍微配置一下,它可以完成您要求的所有功能。使用save函数配置它有点棘手,因为save函数不需要配置,但这并非不可能。可能导致问题的主要原因是您必须使用“保存并继续编辑”来访问和使用缩略图选项。如果自保存时创建后尚未创建,则在执行此操作之前,它将不可见
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)
我希望这能对你有所帮助
在模型中,有两个字段“图像”和“缩略图”,在“视图”中,在验证图像类型和大小之后,使用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中使用不同的上传路径能否提供一个示例代码片段,说明如何配置保存功能,以及如何使用“保存并继续编辑”?谢谢。“保存并继续编辑”的基本功能是,保存功能将生成easy_缩略图URL,您可以为原始图像的宽度和高度以及缩略图创建相同的选项,还有一个图像上传器和一个用于在模型中存储缩略图的部分。你是如何解决你的问题的?@weisson我尝试了这三个应用程序,它们都不完美,而且过于固执己见(没有其他方法可以解决)。我正在对pica.js使用客户端缩略图。图像块直接上传到S3,不需要图像字段或枕头。现在是2020年,我也遇到了同样的问题。每次我必须添加图像到一个项目,我有一个坏的感觉,因为这一点。