将上传的图像另存为PNG

时间:2016-01-07 19:49:31

标签: python django python-imaging-library

在我的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>

1 个答案:

答案 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已经有了扩展名,而且方法会知道你想要那种格式。