django 无法将webp文件保存到模型字段

g6baxovj  于 2023-02-17  发布在  Go
关注(0)|答案(2)|浏览(211)

我不确定这是否完全与django有关,但是如果有人能帮助我,我将不胜感激!我在用下面的代码生成webp文件时遇到了麻烦

from io import BytesIO
from PIL import Image
import requests

我有以下型号

class UserImage(models.Model):     
     user_provided_image = VersatileImageField(upload_to=folder10, null=True, blank=True)     
  nextgen_image = models.FileField(upload_to=folder10,null=True, blank=True) #for WebP images

我正在创建一个webp文件,这段代码可以工作,但是它将它保存到了项目根目录的文件中,我不知道如何将它保存到模型的FileField(即nextgen_image)中

def create_webp_image(sender, instance, *args, **kwargs):

    image_url = instance.image.thumbnail['1920x1080'].url    

    try:
        response = requests.get(image_url, stream=True)
        path = image_url

    except: #local env
        path = "http://localhost:8000" + image_url
        response = requests.get(path, stream=True)

    img = Image.open(BytesIO(response.content))

    #build file path
    position = path.rfind("/") + 1
    newpath = path[0:position]
        
    #build file name
    image_name = path[position:]
    name_of_file = image_name.split('.')[0] + ".webp"
       
    #this creates the webp file
    img.save(name_of_file,"webp")

    #save image to model
    #instance.nextgen_image = ?

post_save.connect(create_webp_image, sender=UserImage)

谢谢!

8mmmxcuj

8mmmxcuj1#

如果你想使用软件包来完成工作,那么就使用这个软件包django-resized
基于上面提供的代码,这应该可以做到这一点。希望这将解决您的问题。干杯
下一代图像=已调整大小的图像字段(强制格式=“WEBP”,上载到=文件夹10,空=真,空=真)

baubqpgj

baubqpgj2#

你可以这样说:

from django.core.files.base import ContentFile

...
img_content = ContentFile(BytesIO(response.content))
instance.nextgen_image.save(name_of_file, img_content, save=True)
...

相关问题