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

标签 django thumbnails image-resizing sorl-thumbnail

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

基本上,我想使用 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/

相关文章:

android - 与我的应用程序图标共享 Android 文本

php - 在不失真的情况下调整图像大小,保持纵横比,然后使用 WideImage 裁剪多余部分

android - 使用 LruCache 中的图像快速滚动 viewPager

django - 如何获取注册日期?

python - 命令 $python3 manage.py migrate 出错

python - django 中的命名约定是强制性的吗?

django - 将多个模型从一个 django 应用程序移动到另一个

css - 如何修复 Firefox 以不同于 Google Chrome 的方式呈现 Bootstrap Thumbnail?

android - 如何在 Android 中获取相册缩略图?

javascript - 如何使用 javascript 调整 Base64 编码的数据 URI PNG 的大小?