use*_*384 9 django thumbnails image-resizing sorl-thumbnail
我正在网上搜索我的问题,但无论如何也找不到明确的答案者.
基本上,我想使用sorl并希望在模型保存时间内调整源图像的大小以将其大小调整为640x480大小,这样我就不会最终在磁盘上存储用户原始的2.5 MB文件.然后我将使用templatetags从我的源代码中创建常规缩略图,如sorl中所述.
我遇到了几个来源引用使用的ThumbnailField模型字段应该在sorl.thumbnail.fields中可用.请点击此处链接.但是,在我从主干中获取最新的sorl副本时,我看不到任何ThumbnailField或ImageWithThumbnailsField.我在模型中导入它的尝试失败了.我看到这些参考文献虽然陈旧但想知道我是否可以用最新的sorl实现相同的目标.
另一方面,sorl文档仅指示来自sorl.thumbnail(参见此处)的ImageField ,它没有任何大小参数来控制源大小调整.
顺便说一下,我看到easy_thumbnail提供了这个功能,它带有一个输入参数source_resize.
任何帮助将不胜感激!
摘要
我接受了下面的答案,但我觉得对这个用例的自然索引支持非常有用 - 即将resize_source参数添加到sorl的ImageField以允许调整源图像的大小.以下是为什么它在该领域有用的两个因素:
如果您的应用程序不需要它,则不要存储用户的巨大原始图像.节省磁盘空间.
如果您没有特定的极高质量原因,请不要花费额外的CPU来重新调整来自巨大源图像的缩略图.为了避免这种情况,可以将模板中的嵌套标签写入较小尺寸图像的缩略图中,但它很快就会变得烦人.
hgr*_*und 12
我在上面的代码中发现了一个缺陷,如果有人想使用它,那么"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)
Run Code Online (Sandbox Code Playgroud)
ImageField
您提到的Sorl 是一个普通的Django ImageField
,它具有管理缓存缩略图删除的额外好处.初始上传没有进行大小调整 - 您必须通过用于上传的视图手动实现.文档展示了如何解决这个问题.您可以使用SORL 在该视图来完成实际大小操作本身,使用低级别API examlpes
编辑
更快的替代方法是在使用sorl保存模型时调整图像大小.您可以执行以下操作(完全未经测试!)
from sorl.thumbnail import get_thumbnail
class Foo(models.Model):
image = models.ImageField(upload_to...)
def save(self, *args, **kwargs):
if not self.id:
# Have to save the image (and imagefield) first
super(Foo, self).save(*args, **kwargs)
# obj is being created for the first time - resize
resized = get_thumbnail(self.image, "100x100" ...)
# Manually reassign the resized image to the image field
self.image.save(resized.name, resized.read(), True)
super(Foo, self).save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
这意味着您将在磁盘上拥有相同图像的2个版本 - 一个是django图像字段决定保存它(upload_to
路径),另一个是sorl缩略图已保存它的已调整大小的缩略图.这与图像上传和保存两次的事实一起,是这种方法的缺点.但实施起来更快
归档时间: |
|
查看次数: |
6015 次 |
最近记录: |