1

我正在使用 ImageMagick 和绑定棒为 Django 中上传的图像生成缩略图。我可以很好地生成缩略图,但我不确定如何将图像对象从 ImageMagick 传递回 Django 模型。所以我有一个简化的模型如下:

from wand import Image

class Attachment(models.Model):
    attachment = models.FileField(upload_to="some_path")
    thumbnail = models.ImageField(upload_to="other_path")

    def generate_thumb(self):
        with Image(file=self.attachment) as wand:
            thumb = wand.resize(width=50, height=50)
            thumb.save(file=self.thumbnail)

这会在最后一行生成一个错误ValueError: The 'thumbnail' attribute has no file associated with it. Is there a simple way to get a file object out of wand and into django without too much siliness?

谢谢。

4

2 回答 2

5

免责声明:我是您尝试使用的Wand的创建者。

首先,ImageField需要PIL。这意味着您不需要 Wand,因为您可能已经安装了另一个图像库。但是,我会在没有任何大的变化的情况下回答您的问题。

目前似乎self.thumbnail尚未初始化,因此您必须创建一个新的FileImageFile首先:

import io

def generate_thumb(self):
    buffer = io.BytesIO()
    with Image(file=self.attachment) as wand:
        wand.resize(width=50, height=50)
        wand.save(file=buffer)
    buffer.seek(0)
    self.thumbnail = ImageFile(buffer)

另外,from wand import Image会提高ImportError。它应该改变:

from wand.image import Image
于 2012-09-12T13:19:13.883 回答
2

如果目标是您的 django 应用程序中的简单缩略图,请尝试:https ://github.com/sorl/sorl-thumbnail

它非常受欢迎和活跃。

于 2012-09-12T13:22:34.500 回答