所以基本上我有一个 django 模型,它有一个文件字段。我想调整提交的图像的大小,我在这里有这段代码
def save(self, *args, **kwargs):
img = Image.open(self.media)
output = BytesIO()
original_width, original_height = img.size
aspect_ratio = round(original_width / original_height)
desired_height = 100
desired_width = desired_height * aspect_ratio
img = img.resize((desired_width, desired_height))
img.save(output, format='JPEG', quality=90)
output.seek(0)
self.image = InMemoryUploadedFile(output, 'ImageField', "%s.jpg" % self.image.name.split('.')[0], 'image/jpeg', sys.getsizeof(output), None)
super(Post, self).save(*args, **kwargs)
我得到的错误是“名称‘InMemoryUploadedFile’未定义”。我该如何解决?也是一个附带问题。该模型还接收视频。我将如何调整视频大小?这只是一个附带问题 InMemoryUploaded 是主要问题。谢谢!
答案 0 :(得分:1)
您是否导入了 InMemoryUploadedFile?
请先导入
from django.core.files.uploadedfile import InMemoryUploadedFile
答案 1 :(得分:1)
您不需要使用 InMemoryUploadedFile
来保存文件。您也会收到错误,因为您从未导入它。导入它from django.core.files import InMemoryUploadedFile
。而不是它,你应该更好地使用 ContentFile
:
from django.core.files.base import ContentFile
...
def save(self, *args, **kwargs):
img = Image.open(self.media)
output = BytesIO()
original_width, original_height = img.size
aspect_ratio = round(original_width / original_height)
desired_height = 100
desired_width = desired_height * aspect_ratio
img = img.resize((desired_width, desired_height))
img.save(output, format='JPEG', quality=90)
output.seek(0)
self.image.save("%s.jpg" % self.image.name.split('.')[0], ContentFile(output), save=False)
super(Post, self).save(*args, **kwargs)