Python 在每个模型保存()上创建缩略图
这是用户配置文件的模型。味道好极了。这段代码的问题是,每当我更新文本字段时,都会再次创建缩略图和图像,而不会删除以前的缩略图和图像。这确实是件坏事。那么,有没有办法在每次更新文本字段时避免复制图像和缩略图?我想在视图中创建缩略图,但是,我无法编写工作代码 用于作业 只需使用应用程序提供的ImageField,您的所有问题就会迎刃而解 在您的情况下,模型中只需要图像字段。使用solr thumbnail,您只需要一个文件就可以用它创建多个不同大小的缩略图。当原始文件不再存在时,应用程序还会删除缩略图Python 在每个模型保存()上创建缩略图,python,django,django-models,python-imaging-library,Python,Django,Django Models,Python Imaging Library,这是用户配置文件的模型。味道好极了。这段代码的问题是,每当我更新文本字段时,都会再次创建缩略图和图像,而不会删除以前的缩略图和图像。这确实是件坏事。那么,有没有办法在每次更新文本字段时避免复制图像和缩略图?我想在视图中创建缩略图,但是,我无法编写工作代码 用于作业 只需使用应用程序提供的ImageField,您的所有问题就会迎刃而解 在您的情况下,模型中只需要图像字段。使用solr thumbnail,您只需要一个文件就可以用它创建多个不同大小的缩略图。当原始文件不再存在时,应用程序还会删除缩略
这也是一件轻而易举的事。当您更新模型django时,请调用save方法。所以你必须为self.create_thumbnail加上一些if。我没听懂你的意思。它会动态创建缩略图吗?thanx。这就是我所需要的。
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)