Django裁剪器-从裁剪的图像中获取其他大小调整的图像

Django裁剪器-从裁剪的图像中获取其他大小调整的图像,django,django-models,Django,Django Models,我无法从Cropped image中获取其他已调整大小的图像。我使用的是django cropper 0.1。 最初,裁剪图像的模型有如下部分代码: class Cropped(models.Model): def __unicode__(self): return u'%s-%sx%s' % (self.original, self.w, self.h) def upload_image(self, filename): return '%s/

我无法从Cropped image中获取其他已调整大小的图像。我使用的是django cropper 0.1。 最初,裁剪图像的模型有如下部分代码:

class Cropped(models.Model):
    def __unicode__(self):
        return u'%s-%sx%s' % (self.original, self.w, self.h)

    def upload_image(self, filename):
        return '%s/crop-%s' % (settings.ROOT, filename)

    def save(self, *args, **kwargs): #force_insert=False, force_update=False, using=None):
        source = self.original.image.path
        target = self.upload_image(os.path.basename(source))

        Image.open(source).crop([
            self.x,             # Left
            self.y,             # Top
            self.x + self.w,    # Right
            self.y + self.h     # Bottom
        ]).save(django_settings.MEDIA_ROOT + os.sep + target)


        self.image = target        
        super(Cropped, self).save(*args, **kwargs)
 def save(self, *args, **kwargs): #force_insert=False, force_update=False, using=None):
        source = self.original.image.path
        target = self.upload_image(os.path.basename(source))

        Image.open(source).crop([
            self.x,             # Left
            self.y,             # Top
            self.x + self.w,    # Right
            self.y + self.h     # Bottom
        ]).save(django_settings.MEDIA_ROOT + os.sep + target)
        self.image = target

        splited_target = target.split("/")
        avepath = "/average-".join(splited_target) 
        self.average = avepath

        Image.open(self.image).resize((104, 104), Image.ANTIALIAS).save(django_settings.MEDIA_ROOT + avepath, 'JPEG')
        super(Cropped, self).save(*args, **kwargs)
但我想从裁剪后的图像中添加其他大小调整后的图像,所以我稍微更改了代码,现在看起来是这样的:

class Cropped(models.Model):
    def __unicode__(self):
        return u'%s-%sx%s' % (self.original, self.w, self.h)

    def _get_average_path(self):
        return _add_average(self.path)
    average_path = property(_get_average_path)

    def _get_average_url(self):
        return _add_average(self.url)
    average_url = property(_get_average_url)

    def _get_large_path(self):
        return _add_large(self.path)
    large_path = property(_get_large_path)

    def _get_large_url(self):
        return _add_large(self.url)
    large_url = property(_get_large_url)

    def upload_image(self, filename):
        return '%s/crop-%s' % (settings.ROOT, filename)

    def save(self, *args, **kwargs): #force_insert=False, force_update=False, using=None):
        source = self.original.image.path
        target = self.upload_image(os.path.basename(source))

        img = Image.open(source).crop([
            self.x,             # Left
            self.y,             # Top
            self.x + self.w,    # Right
            self.y + self.h     # Bottom
        ]).save(django_settings.MEDIA_ROOT + os.sep + target)

        self.image = target        
        super(Cropped, self).save(*args, **kwargs)
        img = Image.open(self.image.path)
        img = img.resize((180, 180), Image.ANTIALIAS)
        img.save(self.large_path, 'JPEG')

        img = img.resize((104, 104), Image.ANTIALIAS)
        img.save(self.average_path, 'JPEG') 

但它仍然在做基本的工作。有没有人能帮我,并给我一些建议,我应该在这段代码中修复什么?

我回答我自己的问题,因为我找到了解决方案,也许是某个人。也许现在这是最好的解决方案,但它是有效的。首先,需要为其他已调整大小的图像添加其他字段:

average = models.ImageField(
    blank=True, null=True,
    verbose_name = _('Image'),
    upload_to    = upload_image,
    editable     = False,
)
然后需要将save()方法更改为如下内容:

class Cropped(models.Model):
    def __unicode__(self):
        return u'%s-%sx%s' % (self.original, self.w, self.h)

    def upload_image(self, filename):
        return '%s/crop-%s' % (settings.ROOT, filename)

    def save(self, *args, **kwargs): #force_insert=False, force_update=False, using=None):
        source = self.original.image.path
        target = self.upload_image(os.path.basename(source))

        Image.open(source).crop([
            self.x,             # Left
            self.y,             # Top
            self.x + self.w,    # Right
            self.y + self.h     # Bottom
        ]).save(django_settings.MEDIA_ROOT + os.sep + target)


        self.image = target        
        super(Cropped, self).save(*args, **kwargs)
 def save(self, *args, **kwargs): #force_insert=False, force_update=False, using=None):
        source = self.original.image.path
        target = self.upload_image(os.path.basename(source))

        Image.open(source).crop([
            self.x,             # Left
            self.y,             # Top
            self.x + self.w,    # Right
            self.y + self.h     # Bottom
        ]).save(django_settings.MEDIA_ROOT + os.sep + target)
        self.image = target

        splited_target = target.split("/")
        avepath = "/average-".join(splited_target) 
        self.average = avepath

        Image.open(self.image).resize((104, 104), Image.ANTIALIAS).save(django_settings.MEDIA_ROOT + avepath, 'JPEG')
        super(Cropped, self).save(*args, **kwargs)

仅此而已。

我在代码中找不到生成其他变体的地方。您刚刚实现了一些附加的方法,但从未调用它们。顺便问一下,使用django cuddlybuddly这样的基于模板的方法会是一种替代方法吗?对我来说,效果更好。django-拥抱?我看了一下,但它似乎并没有在显示的页面上裁剪图像的功能。当然,也许我错了。所以,你能告诉我,我应该怎么做才能调用保存额外图像的方法吗?