我不确定这是否完全与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)
谢谢!
2条答案
按热度按时间8mmmxcuj1#
如果你想使用软件包来完成工作,那么就使用这个软件包django-resized。
基于上面提供的代码,这应该可以做到这一点。希望这将解决您的问题。干杯
下一代图像=已调整大小的图像字段(强制格式=“WEBP”,上载到=文件夹10,空=真,空=真)
baubqpgj2#
你可以这样说: