From ddab06639b72308d3d0951bdaf796b0c6565c8a6 Mon Sep 17 00:00:00 2001 From: Ivlev Denis Date: Wed, 7 Feb 2018 17:10:29 +0300 Subject: [PATCH] Crop image at center on backend --- apps/user/views.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/apps/user/views.py b/apps/user/views.py index 9ad82013..3b3f1daa 100644 --- a/apps/user/views.py +++ b/apps/user/views.py @@ -1,3 +1,6 @@ +from io import BytesIO +from PIL import Image +from os.path import splitext from django.contrib.auth import login from django.shortcuts import render, reverse from django.views.generic import DetailView, UpdateView @@ -42,6 +45,30 @@ class UserEditView(UpdateView): def post(self, request, *args, **kwargs): # it's magic *-*-*-*-* + if 'photo' in request.FILES: + photo_fp = request.FILES.pop('photo')[0] + fname = photo_fp.name + photo = Image.open(photo_fp) + lowest_side = min(photo.size) + horizontal_padding = (lowest_side - photo.size[0]) / 2 + vertical_padding = (lowest_side - photo.size[1]) / 2 + photo = photo.crop( + ( + -horizontal_padding, + -vertical_padding, + photo.size[0] + horizontal_padding, + photo.size[1] + vertical_padding + ) + ) + if photo.size[0] > 512: + photo = photo.resize((512, 512,)) + buffer = BytesIO() + ext = splitext(fname)[1][1:].upper() + if ext == 'JPG': + ext = 'JPEG' + photo.save(buffer, ext) + self.object.photo.save(fname, buffer) + buffer.close() if not request.POST._mutable: request.POST._mutable = True old_password = request.POST.pop('old_password')[0]