Как изменить размер и обрезать изображение в квадрат в Django? - PullRequest
0 голосов
/ 06 февраля 2019

Я хотел обрезать изображения своего профиля в квадраты и уменьшить их размер.Поэтому я погуглил «матрицу изменения размера изображения».Ни один из результатов не соответствовал моим потребностям, поэтому я написал свой собственный код.Это в питоне / джанго.Я решил, что большинство изображений головы имеют больше места на дне из-за шеи и плеч.Поэтому я обрезал высоты сверху, а не из середины.Все ширины обрезаны до середины.Максимум 300 пикселей.Я полагаю, это может помочь кому-то, кто имеет аналогичные задачи.

Мне нужно больше очков, чтобы я мог голосовать за вещи.Я пользуюсь сайтом весь день и получаю много ответов, но не могу голосовать.Что заставляет меня чувствовать себя виноватым.

from PIL import Image

class CustomUser(AbstractBaseUser, PermissionsMixin):
    # User model fields, etc
    image = models.ImageField(default='default.jpg',upload_to='profile_pics')

    def save(self, *args, **kwargs):
        super().save()
        img = Image.open(self.image.path)
        width, height = img.size  # Get dimensions

        if width > 300 and height > 300:
            # keep ratio but shrink down
            img.thumbnail((width, height))
            width, height = img.size

            # check which one is smaller
            if height < width:
                # make square by cutting off equal amounts left and right
                left = (width - height) / 2
                right = (width + height) / 2
                top = 0
                bottom = height
                img = img.crop((left, top, right, bottom))
                img.thumbnail((300, 300))
                img.save(self.image.path)

            elif width < height:
                # make square by cutting off bottom
                left = 0
                right = width
                top = 0
                bottom = width
                img = img.crop((left, top, right, bottom))
                img.thumbnail((300, 300))
                img.save(self.image.path)
            else:
                # already square
                img.thumbnail((300, 300))
                img.save(self.image.path)

        elif width > 300 and height == 300:
            left = (width - 300) / 2
            right = (width + 300) / 2
            top = 0
            bottom = 300
            img = img.crop((left, top, right, bottom))
            img.save(self.image.path)

        elif width > 300 and height < 300:
            left = (width - height) / 2
            right = (width + height) / 2
            top = 0
            bottom = height
            img = img.crop((left, top, right, bottom))
            img.save(self.image.path)

        elif width < 300 and height > 300:
            # most potential for disaster
            left = 0
            right = width
            top = 0
            bottom = width
            img = img.crop((left, top, right, bottom))
            img.save(self.image.path)

        elif width < 300 and height < 300:
            if height < width:
                left = (width - height) / 2
                right = (width + height) / 2
                top = 0
                bottom = height
                img = img.crop((left, top, right, bottom))
                img.save(self.image.path)
            elif width < height:
                height = width
                left = 0
                right = width
                top = 0
                bottom = height
                img = img.crop((left, top, right, bottom))
                img.save(self.image.path)
            else:
                img.save(self.image.path)

        elif width == 300 and height > 300:
            # potential for disaster
            left = 0
            right = 300
            top = 0
            bottom = 300
            img = img.crop((left, top, right, bottom))
            img.save(self.image.path)

        elif width == 300 and height < 300:
            left = (width - height) / 2
            right = (width + height) / 2
            top = 0
            bottom = height
            img = img.crop((left, top, right, bottom))
            img.save(self.image.path)

        elif width < 300 and height == 300:
            left = 0
            right = width
            top = 0
            bottom = width
            img = img.crop((left, top, right, bottom))
            img.save(self.image.path)

        elif width and height == 300:
            img.save(self.image.path)

1 Ответ

0 голосов
/ 06 февраля 2019

Вы можете использовать подушку для управления изображениями в Python.Вы можете установить его с помощью pip.Он имеет множество функций, которые могут помочь вам в работе с изображениями.Вы можете узнать больше о подушке здесь:

https://pypi.org/project/Pillow/

https://pillow.readthedocs.io/en/stable/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...