将上传的图像保存为 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 已经有了扩展名,并且该方法会确定您需要那种格式的扩展名。