我一直在为Django阅读和尝试各种缩略图应用程序。这些是要求:
所有生成的缩略图必须保存在与原始图像分开的S3存储桶中,即单独的存储类
删除图像实例时,原始图像文件以及所有生成的缩略图也必须删除
尽量减少代价高昂的低效率,例如获取缩略图的URL以在DRF中序列化不应该在S3桶中查看它是否每次都存在等等。
VersatileImageField无法满足第一个要求。 ImageKit未能满足第二个要求。第三个要求是我最困惑的地方;我试图告诉自己最佳做法,但信息是分散的,我对根据我迄今所学到的知识做出决定没有信心。
根据我的阅读,我的印象是最有效的行为如下:
我最感兴趣的是了解简易缩略和缩略图所采用的方法的差异(如果它们与我上面非常简要概述的流程一致,或者如果它们有更高效的东西),以及他们每种方法的优点/缺点。
答案 0 :(得分:0)
我不确定这是否有用,但我过去使用过简单的缩略图,我相当确定它能完成你所要求的所有事情如果你配置一下。使用保存功能对其进行配置有点棘手,因为保存功能并不需要配置,但这并非不可能。可能导致问题的主要原因是您必须使用“保存并继续编辑”。访问和使用缩略图选项。直到你这样做才能看到它,如果你还没有创建它,因为它是在保存时创建的。
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)
答案 1 :(得分:0)
希望可以帮到你 在模型中,有图像和缩略图两个字段,在视图中验证图像类型和大小,然后使用 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 不同的路径