How do you convert a PIL `Image` to a Django `File`?

前端 未结 7 1382
無奈伤痛
無奈伤痛 2020-11-27 11:58

I\'m trying to convert an UploadedFile to a PIL Image object to thumbnail it, and then convert the PIL Image object that my thumbnail

7条回答
  •  情书的邮戳
    2020-11-27 12:39

    To complete for those who, like me, want to couple it with Django's FileSystemStorage: (What I do here is upload an image, resize it to 2 dimensions and save both files.

    utils.py

    def resize_and_save(file):
        size = 1024, 1024
        thumbnail_size = 300, 300
        uploaded_file_url = getURLforFile(file, size, MEDIA_ROOT)
        uploaded_thumbnail_url = getURLforFile(file, thumbnail_size, THUMBNAIL_ROOT)
        return [uploaded_file_url, uploaded_thumbnail_url]
    
    def getURLforFile(file, size, location):
        img = Image.open(file)
        img.thumbnail(size, Image.ANTIALIAS)
        thumb_io = BytesIO()
        img.save(thumb_io, format='JPEG')
        thumb_file = InMemoryUploadedFile(thumb_io, None, file.name, 'image/jpeg', thumb_io.tell, None)
        fs = FileSystemStorage(location=location)
        filename = fs.save(file.name, thumb_file)
        return fs.url(filename)  
    

    In views.py

    if request.FILES:
            fl, thumbnail = resize_and_save(request.FILES['avatar'])
            #delete old profile picture before saving new one
            try:
                os.remove(BASE_DIR + user.userprofile.avatarURL)
            except Exception as e:
                pass         
            user.userprofile.avatarURL = fl
            user.userprofile.thumbnailURL = thumbnail
            user.userprofile.save()
    

提交回复
热议问题