Я пытаюсь создать модель для новостей. Моя модель содержит ImageField, где я не буду хранить миниатюру:Image.thumbnail - невозможно изменить размер правильно
class News(models.Model):
title = models.CharField(verbose_name=u'tytuł', max_length=40)
lead = models.TextField(verbose_name=u'zajawka', blank= False)
body = models.TextField(verbose_name=u'treść ogłosznia', blank=False)
author = models.ForeignKey(User)
active = models.BooleanField(verbose_name=u'aktywność ogłoszenia')
pub_date = models.DateTimeField(verbose_name=u'data publikacji')
slug = models.SlugField(unique=True)
lead_photo= models.ImageField(upload_to="lead_photo/")
objects= NewsManager()
я нашел на другом коде сайта, и я изменил его к моим потребностям:
def save(self, force_update=False, force_insert=False, thumb_size=(120,120)):
from PIL import Image
from cStringIO import StringIO
from django.core.files.uploadedfile import SimpleUploadedFile
image = Image.open(self.lead_photo)
if image.mode not in ('L', 'RGB'):
image = image.convert('RGB')
image.thumbnail(thumb_size, Image.ANTIALIAS)
# save the thumbnail to memory
temp_handle = StringIO()
image.save(temp_handle, 'JPEG')
temp_handle.seek(0) # rewind the file
# save to the thumbnail field
suf = SimpleUploadedFile(os.path.split(self.lead_photo.name)[-1],
temp_handle.read(),
content_type='image/jpeg')
self.lead_photo.save(suf.name+'.png', suf, save=False)
# save the image object
super(News, self).save(force_update, force_insert)
проблема заключается в том, что я не могу создать миниатюру с различными ширина и высота пропорция. Когда, например, set thumb_size (240,320), я получаю ту же пропорцию, что и в оригинали, но изображение меньше. Спасибо за советы.
Редактировать: На документации PIL я нашел очень интересное предложение об этом методе: «Этот метод изменяет изображение, чтобы оно содержало собственную версию миниатюры, не превышающую заданный размер». Так есть ли какой-либо вариант, чтобы сделать его точным, чтобы размер?