我在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格式保存怎么办? 我的应用程序正在生产中。所以我只想为正确的工作推送正确的代码。请帮我弄清楚。
答案 0 :(得分:0)
A:有些图像处于RGBA
或P
模式,不支持直接转换为JPG
说明:
JPG
不支持alpha = transparency
RGBA
,P
有alpha = transparency
RGBA
= Red Green Blue Alpha
cannot write mode RGBA as JPEG
cannot write mode P as JPEG
alpha = transparency
Image
转换为RGB
JPG
->您的位置: 因此您使用convert转换为PNG然后保存
im.save(output, format='PNG', optimize=True, quality=95)
A:不。
推荐使用:
rgba_or_p_im = original_im
if rgba_or_p_im.mode in ["RGBA", "P"]:
rgb_im = rgba_or_p_im.convert("RGB")
rgb_im.save("xxx.jpg")