в моем models.py я получил класс с именем Post with и ImageField с именем postcover.
Я хочу сохранить каждое изображение в формате PNG, который до сих пор работал нормально, но я понятия не имею, как можно сохранить фактическое соотношение сторон изображения после обработки изображения, потому что в настоящее время я статически конвертирую его в формат 4: 3, сохраняя при этом 500 на 375 пикселей.
def save(self, *args, **kwargs):
super(Post, self).save(*args, **kwargs)
if self.postcover:
if os.path.exists(self.postcover.path):
imageTemproary = Image.open(self.postcover)
outputIoStream = BytesIO()
imageTemproaryResized = imageTemproary.resize((500, 375))
imageTemproaryResized.save(outputIoStream, format='PNG')
outputIoStream.seek(0)
self.postcover = InMemoryUploadedFile(outputIoStream, 'ImageField',
"%s.png" % self.postcover.name.split('.')[0], 'image/png',
sys.getsizeof(outputIoStream), None)
super(Post, self).save(*args, **kwargs)
Есть ли способ установить максимальную ширину и высоту, сохраняя формат?
UPDATE:
если я попробую это так (см. Пост ниже):
def save(self, *args, **kwargs):
super(Post, self).save(*args, **kwargs)
if self.postcover:
if os.path.exists(self.postcover.path):
imageTemproary = Image.open(self.postcover)
outputIoStream = BytesIO()
baseheight = 500
hpercent = (baseheight / float(self.postcover.size[1]))
wsize = int((float(self.postcover.size[0]) * float(hpercent)))
imageTemproaryResized = imageTemproary.resize((wsize, baseheight))
imageTemproaryResized.save(outputIoStream, format='PNG')
outputIoStream.seek(0)
self.postcover = InMemoryUploadedFile(outputIoStream, 'ImageField',
"%s.png" % self.postcover.name.split('.')[0], 'image/png',
sys.getsizeof(outputIoStream), None)
super(Post, self).save(*args, **kwargs)
Я просто получаю сообщение об ошибке:
Объект int не является подписным