【发布时间】:2018-10-05 22:41:48
【问题描述】:
我已经在我的 django 应用程序中借助以下代码上传了 10 多张图片(使用图片枕头库)。
def save(self):
im = Image.open(self.image)
output = BytesIO()
im = im.resize((500, 500))
im.save(output, format='JPEG', optimize=True, quality=95)
output.seek(0)
self.image = InMemoryUploadedFile(output, 'ImageField', "%s.jpg" % self.image.name.split('.')[0], 'image/jpeg',
sys.getsizeof(output), None)
super(Report_item, self).save()
但现在我的 Django 应用程序出现以下错误。
Exception Type: OSError
Exception Value:
cannot write mode RGBA as JPEG
我从 StackOverflow 的一个答案中获得了解决方案,将图像类型从任何其他类型更改为 png。
现在我的代码看起来像这样,但与之前相比,这个过程似乎有点慢。
def save(self):
im = Image.open(self.image)
output = BytesIO()
im = im.resize((500, 500))
im.save(output, format='PNG', optimize=True, quality=95)
output.seek(0)
self.image = InMemoryUploadedFile(output, 'ImageField', "%s.png" % self.image.name.split('.')[0], 'image/jpeg',
sys.getsizeof(output), None)
super(Report_item, self).save()
现在图片正在上传,没有任何问题。
请向我解释为什么我在上传超过 10 张照片后出现了这个错误。 这是正确的方法吗。如果我想保存为 jpeg 格式怎么办? 我的应用程序正在生产中。所以我只想为正确的工作推送正确的代码。请帮我弄清楚。
【问题讨论】:
-
我已经从那个答案中解决了这个问题。我正在寻找上传 10 多张照片后为什么会发生这种情况以及我的看法。这是正确的做法吗?
-
该链接应该让 JPEG 再次为您工作,但至于为什么它突然停止工作,这可能是多种原因。我对 Django 了解不多,无法真正给你一个直接的答案,但我怀疑最近的更新可能会贬低你完成此任务的方式。 github.com/python-pillow/Pillow/issues/2609
标签: python django model django-forms python-imaging-library