Я пытаюсь этот код, но я делаю что-то не так.
class Photo(TimestampedModel):
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
image = models.ImageField(upload_to="photos")
image_600 = ImageSpecField(source='image',
processors=[ResizeToFill(600, 600)],
format='JPEG',
options={'quality': 70})
def save(self, *args, **kwargs):
if not self.id:
self.image = self.compressImage(self.image)
super(Photo, self).save(*args, **kwargs)
def compressImage(self, image):
imageTemporary = Image.open(image)
format = imageTemporary.format
outputIoStream = BytesIO()
imageTemporary.save(outputIoStream, format=format, quality=70)
outputIoStream.seek(0)
image = InMemoryUploadedFile(outputIoStream, 'ImageField', image.name,
format, None, None)
return image
def resizeImage(self, image):
basewidth = 600
img = Image.open(image)
format = img.format
wpercent = (basewidth/float(img.size[0]))
hsize = int((float(img.size[1])*float(wpercent)))
img = img.resize((basewidth,hsize), Image.ANTIALIAS)
outputIoStream = BytesIO()
img.save(outputIoStream, format=format, quality=70)
outputIoStream.seek(0)
image = InMemoryUploadedFile(outputIoStream, 'ImageField', image.name,
format, None, None)
return image
Идея состоит в том, чтобы создать второе изображение (image_card
), с новым размером.
В конце я получаю изображение для image_card
, но не для image
.
Методы compressImage()
и resizeImage()
работают правильно, но я подозреваю, что resizeImage получает тот же экземпляр изображения.
Если я прокомментирую line self.image_card = self.resizeImage(self.image)
, image
снова будет работать.