class UserProfile(models.Model):
user = models.OneToOneField(User, related_name="person")
image = models.ImageField(upload_to='site-media/media/userimages/', default = 'site-media/user_default.jpeg')
thumbnail = models.ImageField(upload_to="site-media/media/userimages/userthumbs/", blank=True, null=True)
thumbnail2 = models.ImageField(upload_to="site-media/media/userimages/userthumbs2/", blank=True, null=True)
pub_date = models.DateTimeField(auto_now_add=True)
bio = models.CharField(max_length=300, blank = True)
def create_thumbnail(self):
if not self.image:
return
IMAGE_SIZE = (150,150)
user_name = self.user.username
image = Image.open(StringIO(self.image.read()))
imagef = ImageOps.fit(image, IMAGE_SIZE, Image.ANTIALIAS)
temp_handle = StringIO()
imagef.save(temp_handle, 'jpeg')
temp_handle.seek(0)
suf = SimpleUploadedFile(os.path.split(self.image.name)[-1],
temp_handle.read(), content_type='image/jpeg')
self.image.save('%s.%s'%(user_name,'jpeg'), suf, save=False)
THUMBNAIL_SIZE = (100,100)
image = Image.open(StringIO(self.image.read()))
thumb = ImageOps.fit(image, THUMBNAIL_SIZE, Image.ANTIALIAS)
temp_handle = StringIO()
thumb.save(temp_handle, 'jpeg')
temp_handle.seek(0)
suf = SimpleUploadedFile(os.path.split(self.image.name)[-1],
temp_handle.read(), content_type='image/jpeg')
self.thumbnail.save('%s_thumb.%s'%(user_name,'jpeg'), suf, save=False)
THUMBNAIL2_SIZE = (32,32)
thumb2 = ImageOps.fit(image, THUMBNAIL2_SIZE, Image.ANTIALIAS)
temp_handle = StringIO()
thumb2.save(temp_handle, 'jpeg')
temp_handle.seek(0)
suf = SimpleUploadedFile(os.path.split(self.image.name)[-1],
temp_handle.read(), content_type='image/jpeg')
self.thumbnail2.save('%s_thumb2.%s'%(user_name,'jpeg'), suf, save=False)
def save(self, *args, **kwargs):
"""Save image dimensions."""
self.create_thumbnail()
super(UserProfile, self).save(*args, **kwargs)
这是用户个人资料的模型。它很棒。这段代码的问题在于,每当我更新文本字段时,都会再次创建缩略图和图像,而不会删除之前的缩略图和图像。这绝对是一件坏事。那么,有没有办法避免每次更新文本字段时图像和缩略图的副本?我想在视图中创建缩略图,但是,我无法编写工作代码。
答案 0 :(得分:0)
使用solr-thumbnail作业。
只需使用应用提供的ImageField
,您的所有麻烦都将消失。 :)
在您的情况下,您只需要模型中的image
字段。使用solr-thumbnail
,您只需要一个文件来创建各种大小的缩略图。当原始文件不再存在时,该应用程序还会删除缩略图。
Installation process也是一件轻而易举的事。