如何使用 ImageField 模型调整使用 Django 上传的图像文件的大小? [关闭]

Posted

技术标签:

【中文标题】如何使用 ImageField 模型调整使用 Django 上传的图像文件的大小? [关闭]【英文标题】:How can I resize an image file uploaded with Django using an ImageField Model? [closed] 【发布时间】:2013-03-09 07:42:39 【问题描述】:

将通过 Django 表单上传的图像文件调整为ImageField 的最直接方法是什么?

【问题讨论】:

What have you tried? 使用 PIL 完成工作:***.com/questions/273946/… 您需要使用外部库或应用程序来实现这一点,因为 django 没有任何预定义的方法来满足您的需求。 有没有办法重新打开这个封闭的问题,以便我可以分享我的现代解决方案? (Django 2.0 和 Python3.6)。 ***.com/a/57637103/4816270 【参考方案1】:

我很恼火,因为我找不到一个完整的工作示例,只有零零碎碎的部分。我设法自己把解决方案放在一起。这是完整的例子,我把它放在表单的 clean() 方法中(你也可以覆盖模型的 save() 方法,以完全相同的方式 - 更改 ImageField 的文件属性)。

import StringIO
from PIL import Image

image_field = self.cleaned_data.get('image_field')
image_file = StringIO.StringIO(image_field.read())
image = Image.open(image_file)
w, h = image.size

image = image.resize((w/2, h/2), Image.ANTIALIAS)

image_file = StringIO.StringIO()
image.save(image_file, 'JPEG', quality=90)

image_field.file = image_file

【讨论】:

感谢这个例子,但我不明白一切......什么是“信息”?否则,在 python 3.x 中它是 io.StringIO(...)【参考方案2】:

您可以使用 PIL 并在 YourModel.save() 方法中调整图像大小。

例子:

resize image on save

http://djangosaur.tumblr.com/post/422589280/django-resize-thumbnail-image-pil

http://davedash.com/2009/02/21/resizing-image-on-upload-in-django/

【讨论】:

你有代码示例吗? 是的,已添加到我的帖子中:) +1 建议 PIL 没有一个链接是我用例的完整示例,我在之前的尝试中集成代码时遇到了问题。 这个答案在答案中包含代码示例会更好,而不仅仅是链接到您尝试点击链接时可能已关闭的其他网站。

以上是关于如何使用 ImageField 模型调整使用 Django 上传的图像文件的大小? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Django 信号(Pre_save,Post_save)从“B”模型的 ImageField 设置“A”模型的 ImageField

姜戈。覆盖模型的保存

Django Rest Framework imageField 到服务器

将通过 ajax 上传的文件保存到 Django 模型 ImageField

Django ORM 中 ImageField 的默认图像

带有 ImageFIeld 和 HTTPS 的 Django ModelSerializer