【发布时间】:2020-11-23 13:52:24
【问题描述】:
我正在尝试调整ImageField 图像的大小并覆盖现有文件。我正在使用 Django 3.1.2 和 Pillow 8.0.0。当我保存更新的图像时,它的 upload_to 路径似乎将 prepended 到现有文件路径。我不知道它为什么这样做,我希望它停止。
字段定义为:
hero_image = models.ImageField(blank=True, null=True, upload_to="images/articles/hero")
这是一个可重现的例子:
from my_app.models import Article
from PIL import Image, ImageOps
from six import BytesIO
# load an Article
article=Article.objects.get(id=6019)
# get its image
article.hero_image
> <ImageFieldFile: images/articles/hero/park_lake_5.jpg>
# open the image
image_file = Image.open(article.hero_image)
# resize the image
image_file_fit = ImageOps.fit(image_file, (100,100), method=Image.LANCZOS)
# create a stream
image_content = BytesIO()
# save updated image to stream
image_file_fit.save(image_content, format="JPEG", quality=80)
# create a new image file from the stream
new_image_content = ImageFile(image_content)
# save the new image content into the existing image field
article.hero_image.save(article.hero_image.name, new_image_content)
# inspect the updated image
article.hero_image
<ImageFieldFile: images/articles/hero/images/articles/hero/park_lake_5.jpg
发生了什么事?我做错了什么?
【问题讨论】:
-
save调用generate_fieldname前面加上upload_to。不确定更新图像的更好方法是什么。你不能把它分配给article.hero_image,比如article.hero_image = new_image_content吗?
标签: django python-imaging-library