django-处理jpg和png文件的PIL

时间:2018-07-17 22:56:39

标签: django python-imaging-library

我有一个处理上传的jpg文件的功能,但是当用户上传png时崩溃。如何调整(如果可能)我的函数以适当地处理png文件?

from io import BytesIO
from django.core.files.uploadedfile import InMemoryUploadedFile
from sys import getsizeof

image = self.cleaned_data.get("image")
if not image:
    image = ''
    return image
size = (145,145)

im = Image.open(image)
output = BytesIO()
im.thumbnail(size)
im.save(output, format='JPEG', quality=100)
output.seek(0)

image = InMemoryUploadedFile(output,'ImageField', "%s.jpg" %image.name.split('.')[0], 'image/jpeg', getsizeof(output), None)

return image

1 个答案:

答案 0 :(得分:0)

我已经开始工作了。可能不是最好的方法。

    from PIL import Image
    from io import BytesIO
    from django.core.files.uploadedfile import InMemoryUploadedFile
    from sys import getsizeof

    image = self.cleaned_data.get("image")
    if not image:
        image = ''
        return image

    size = (145,145)

    im = Image.open(image)
    output = BytesIO()
    im.thumbnail(size)
    try:
        im.save(output, format='JPEG', quality=100)
        output.seek(0)
        image = InMemoryUploadedFile(output,'ImageField', "%s.jpg" %image.name.split('.')[0], 'image/jpeg', getsizeof(output), None)
    except:
        im.save(output, format='PNG', quality=100)
        output.seek(0)
        image = InMemoryUploadedFile(output,'ImageField', "%s.png" %image.name.split('.')[0], 'image/png', getsizeof(output), None)

    return image