Mam pewien dziwny problem z PIL, nie zmieniając rozmiaru obrazu.PIL Image.resize() nie zmienia rozmiaru zdjęcia
def handle_uploaded_image(i, u):
# resize image
from PIL import Image
img = Image.open(i)
if img.mode not in ('L', 'RGB'):
img = img.convert('RGB')
width, height = img.size
if width == height:
img.thumbnail(settings.THUMB_SIZE, Image.ANTIALIAS)
elif width > height:
ratio = floor(width/height)
newwidth = ratio * 150
newwidthhalf = floor(newwidth/2)
img.resize((newwidth, 150), Image.ANTIALIAS)
box = 1
img.crop((newwidthhalf, 0, 150, 150))
elif height > width:
ratio = floor(height/width)
newheight = ratio * 150
newheighthalf = floor(newheight/2)
img.resize((150, newheight), image.ANTIALIAS)
box = 1
img.crop((0, newheighthalf, 150, 150))
path = '/'.join([settings.MEDIA_ROOT, 'users', u.username, 'mugshotv2.jpg'])
img.save(path, format='JPEG')
Ten kod działa bez żadnych błędów i daje mi plik o nazwie mugshotv2.jpg w odpowiednim folderze, ale nie zmienić jego rozmiar. Robi to coś, ponieważ rozmiar obrazu spada z 120 kb do 20 kb, ale wymiary pozostają takie same.
Być może możesz również zaproponować sposób przycinania obrazów w kwadraty z mniejszą ilością kodu. Pomyślałem, że robi to Image.thumbnail, ale to, co zrobił, to skalowało mój obraz do szerokości 150 px na szerokość, pozostawiając 100px wysokości.
Alan.
Dzięki! To było to. To był po raz kolejny błąd tego głupiego, łatwego rodzaju, który często robię: P. Patrząc na to jeszcze raz, nie mogę zrozumieć, jak sam tego nie rozumiem - w końcu to było w cholernych doktorów. Chyba muszę iść spać. Jeszcze raz dziękujemy za to, że ImageOps.fit jakiś inny dzień: D –
@Zayatzz, więc zaakceptuj odpowiedź @ Nadii, już, ponieważ to rozwiązało twój problem _i nawet dostarczył porady na temat jeszcze lepszego podejścia! –
Ah .. ten dziwny znaczek wyboru ... ohwell. może użyć czegoś, by zwrócić na to więcej uwagi. –