Сжатие изображения с использованием PIL без изменения ориентации изображения - PullRequest
0 голосов
/ 24 ноября 2018

Я хочу найти способ сжать изображение и сохранить его в той же ориентации.Мой код:

def save(self, **kwargs):
    super(Post, self).save()
    if self.picture:
        mywidth = 1100
        image = Image.open(self.picture)
        wpercent = (mywidth / float(image.size[0]))
        hsize = int((float(image.size[1]) * float(wpercent)))
        image = image.resize((mywidth, hsize), Image.ANTIALIAS)
        image.save(self.picture.path)

Даже если я использую только этот бит:

image = Image.open(self.picture)

, а затем сохраняю его, ничего не делая

image.save(self.picture.path)

это все равно дает мнекартинка с измененной ориентацией ...

1 Ответ

0 голосов
/ 25 ноября 2018

Я подозреваю, что вы испытываете ту же проблему, что и Миниатюра PIL вращает мое изображение?

PIL не вращает изображение как таковое.Файл изображения имеет флаг, отмечающий ориентацию изображения, которое Подушка читает, но не сохраняет в новый файл.

Так что я бы попробовал -

from PIL import Image, ExifTags

def save(self, **kwargs):
    super(Post, self).save()
    if self.picture:
        mywidth = 1100
        image = Image.open(self.picture)

        if hasattr(image, '_getexif'):
            exif = image._getexif()
            if exif:
                for tag, label in ExifTags.TAGS.items():
                    if label == 'Orientation':
                        orientation = tag
                        break
                if orientation in exif:
                    if exif[orientation] == 3:
                        image = image.rotate(180, expand=True)
                    elif exif[orientation] == 6:
                        image = image.rotate(270, expand=True)
                    elif exif[orientation] == 8:
                        image = image.rotate(90, expand=True)

        wpercent = (mywidth / float(image.size[0]))
        hsize = int((float(image.size[1]) * float(wpercent)))
        image = image.resize((mywidth, hsize), Image.ANTIALIAS)
        image.save(self.picture.path)
...