将上传的图像保存为 PNG
Save Uploaded Image as PNG
在我的 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)时,打印语句给出:saved file: <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=628x419 at 0x107354F80>
当您打开文件时,打印语句引用 Image
对象。它使用 JpegImagePlugin
class 因为它是 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
已经有了扩展名,并且该方法会确定您需要那种格式的扩展名。
在我的 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)时,打印语句给出:saved file: <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=628x419 at 0x107354F80>
当您打开文件时,打印语句引用 Image
对象。它使用 JpegImagePlugin
class 因为它是 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
已经有了扩展名,并且该方法会确定您需要那种格式的扩展名。