Crop image at center on backend

remotes/origin/hasaccess
Ivlev Denis 8 years ago
parent 839806b0d2
commit ddab06639b
  1. 27
      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.contrib.auth import login
from django.shortcuts import render, reverse from django.shortcuts import render, reverse
from django.views.generic import DetailView, UpdateView from django.views.generic import DetailView, UpdateView
@ -42,6 +45,30 @@ class UserEditView(UpdateView):
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
# it's magic *-*-*-*-* # 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: if not request.POST._mutable:
request.POST._mutable = True request.POST._mutable = True
old_password = request.POST.pop('old_password')[0] old_password = request.POST.pop('old_password')[0]

Loading…
Cancel
Save