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