2010-09-08 87 views
1

我想在保存图像之前调整图像大小。我在模型上使用了自定义保存方法,但是我遇到了一个问题。模型保存方法。保存前调整图像大小

这是我现在的代码:

class UserImages(models.Model): 
    height = models.CharField(blank=True, max_length=100) 
    width = models.CharField(blank=True, max_length=100) 
    image = models.ImageField(upload_to="UserImages/%Y/%m/%d", height_field='height', width_field='width') 
    owner = models.ForeignKey(User) 

    def __unicode__(self): 
     return str(self.image) 
    def save(self, *args, **kwargs): 
     if self.image: 
      filename = str(self.image.path) 
      img = Image.open(filename) 

      if img.mode not in ('L', 'RGB'): 
       img = img.convert('RGB') 

      img = ImageOps.fit(img, (180,240), Image.ANTIALIAS, 0, (0.5, 0.5)) 
      img.save(self.image.path) 
     super(UserImages, self).save(*args, **kwargs) 

这种失败,并告诉我,该文件无法找到。据我所知,这与现在的图像只存在于内存中并因此不能像这样打开一样。

所以我的问题是:我如何打开图像从内存并将其保存回内存,所以默认的保存方法可以做它的事情呢?

非常感谢您的帮助,这是推动我逼疯了:)

回答

1

你需要这样保存UserImages您尝试访问其ImageField之前。

一个实例如何做到这一点可以在该段中找到:

基本上:

super(UserImages, self).save() 

PS。你的模型应该有一个单独的名字,例如UserImage而不是UserImages

+0

非常感谢。首先想到节约,但后来又忘了。不知道为什么。谢谢你的名字。我一直使用复数命名我的所有模型,这个必须通过最后一次检查:) – 2010-09-08 21:20:34

1

使用Django调整大小

pip install django-resized 

models.py

from django_resized import ResizedImageField 

class MyModel(models.Model): 
    ... 
    image = ResizedImageField(max_width=500, max_height=300, upload_to='whatever') 

欲了解更多信息看https://github.com/un1t/django-resized

+0

这似乎是打破文件上传为我 – max4ever 2014-06-09 08:39:53

相关问题