在我的Django应用中,用户可以上传图片。我想将每个上传的图像保存为PNG。我一直试图用PIL做到这一点,但它没有用。它似乎仍然保存为原始图像类型(无论用户上传它是什么)。我做错了什么?
if form.cleaned_data['dataset_image']:
# dataset.dataset_image = form.cleaned_data['dataset_image']
name = 'dataset%s.png' % (dataset.id)
size = (200, 200)
try:
im = Image.open(form.cleaned_data['dataset_image'])
im.save(name, 'PNG')
print "saved file: ", im
except IOError:
# dont' save the image
pass
当我上传jpg(我想转换为png)时,print语句会给出:saved file: <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=628x419 at 0x107354F80>
答案 0 :(得分:0)
打开文件时,print语句引用Image
对象。它使用JpegImagePlugin
类,因为它是一个jpeg图像。但是,当您调用方法save()
时,您将根据请求的文件名的扩展名保存图像,在本例中为png。
如果你不相信,试试这个。
try:
im = Image.open(form.cleaned_data['dataset_image'])
im.save(name)
png_img = Image.open(name)
print "saved file: ", png_img # it's more clean to print `png_img.format`
顺便说一句,在这种情况下调用im.save(name)
也会这样做,因为name
已经有了扩展名,而且方法会知道你想要那种格式。