Python 将上载的文件转换为PNG

Python 将上载的文件转换为PNG,python,django,django-models,python-imaging-library,image-uploading,Python,Django,Django Models,Python Imaging Library,Image Uploading,我有一个Django表单,用户上传一个文件。我一直在尝试首先验证文件是否为可接受的格式jpg、png或tiff,然后将文件转换为png。我正在使用PIL,但一直被卡住。在我最近的尝试中,我不知道如何将图像转换回文件,以便将文件保存到视图中的模型中。我该怎么做 以下是我表单中的def clean_imageself方法: image = self.cleaned_data.get('my_image') if image: imagetype = imghdr.wh

我有一个Django表单,用户上传一个文件。我一直在尝试首先验证文件是否为可接受的格式jpg、png或tiff,然后将文件转换为png。我正在使用PIL,但一直被卡住。在我最近的尝试中,我不知道如何将图像转换回文件,以便将文件保存到视图中的模型中。我该怎么做

以下是我表单中的def clean_imageself方法:

    image = self.cleaned_data.get('my_image')
    if image:
        imagetype = imghdr.what(image)
        if image._size > 4*1024*1024:
            raise forms.ValidationError("Image is too large. Please select an image < 4mb")
        else:
            if imagetype not in ('jpeg, jpg, png, tiff'):
                raise forms.ValidationError("Only jpeg, png, or tiff file types can be uploaded.")
            # convert image to png regardless of initial upload state
            #size = (130, 130)
            try:
                i = Image.open(image)
                i.load()
                converted = Image.new("RGB", i.size)
                converted_name = str(image).split('.')[0] + ".png"
                converted.save(converted_name, "PNG")
            except IOError:
                raise forms.ValidationError("There was a problem saving your image. Only jpeg, png, or tiff file < 4mb types can be uploaded.")

            return converted

clean_foo只是用于字段验证,您不应该在其中处理文件。为什么不使用upload_to函数来转换文件?啊,好的,谢谢@ShangWang。我想,一旦我将处理转移到其他地方,我仍然会有同样的潜在问题。如果我只是返回image=self.cleaned\u data.get'dataset\u image'从clean方法,我已经可以很好地保存它了。但是,如何解决文件与图像的问题?