【问题标题】:Unable to save webp file to model field无法将 webp 文件保存到模型字段
【发布时间】:2023-02-15 22:59:45
【问题描述】:

我不确定这是否完全与 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)

谢谢!

【问题讨论】:

    标签: python django


    【解决方案1】:

    如果你想使用包来完成工作,那么使用这个包django-resized

    根据上面提供的代码,这应该可以解决问题。希望这能解决您的问题。干杯

    nextgen_image = ResizedImageField(force_format="WEBP", upload_to=folder10,null=True, blank=True)

    【讨论】:

      【解决方案2】:

      你可以使用类似的东西:

      from django.core.files.base import ContentFile
      
      ...
      img_content = ContentFile(BytesIO(response.content))
      instance.nextgen_image.save(name_of_file, img_content, save=True)
      ...
      

      【讨论】:

        猜你喜欢
        • 2020-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-11
        • 2020-02-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多