gpt4 book ai didi

django - 如何使用 sorl-thumbnail 调整源大小?

转载 作者:行者123 更新时间:2023-12-03 02:25:29 27 4
gpt4 key购买 nike

我在网上搜索我的问题,但找不到明确的答案或任何示例。

基本上,我想使用 sorl,并希望在模型保存期间调整源图像的大小,将其大小调整为 640x480 大小,这样我最终就不会在磁盘上存储用户的原始 2.5 MB 文件。然后,我将使用 templatetags 从我的源中创建常规缩略图,如 sorl 中所述。

我遇到了几个引用使用 ThumbnailField 模型字段的来源,该字段应该在 sorl.thumbnail.fields 中可用。请参阅链接here 。但是,在我的最新 sorl 副本中,我没有看到任何 ThumbnailField 或 ImageWithThumbnailsField。我尝试将其导入模型因此失败。我发现这些引用资料很旧,并且想知道我是否可以使用最新的 sorl 实现相同的目标。

另一方面,sorl 文档仅指示 sorl.thumbnail 中的 ImageField(请参阅 here ),它没有任何大小参数来控制源调整大小。

顺便说一句,我发现这个功能可以通过 easy_thumbnail 使用,它需要一个输入参数 source_resize。

任何帮助将不胜感激!

摘要

我接受了下面的答案,但是我觉得 sorl 对这个用例的自然支持非常有用 - 即向 sorl 的 ImageField 添加 resize_source 参数以允许调整源图像的大小。以下是为什么这在该领域有用的两个因素:

  1. 如果您的应用不需要,则不存储用户的巨大原始图像。节省磁盘空间。

  2. 如果您没有特定的极高质量原因,请勿花费额外的 CPU 来调整巨大源图像的缩略图大小。为了避免这种情况,可以在模板中将嵌套标签写入较小尺寸图像的缩略图,但这很快就会变得烦人。

最佳答案

我在上面的代码中发现了一个缺陷,如果有人想使用它,就会得到“str has no method chunck()”。这是我的修复:

    from sorl.thumbnail import get_thumbnail
from django.core.files.base import ContentFile

class Foo(models.Model):
image = models.ImageField(upload_to...)


def save(self, *args, **kwargs):
if not self.id:
super(Foo, self).save(*args, **kwargs)
resized = get_thumbnail(self.image, "100x100" ...)
self.image.save(resized.name, ContentFile(resized.read()), True)
super(Foo, self).save(*args, **kwargs)

关于django - 如何使用 sorl-thumbnail 调整源大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9354242/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com