2013-03-20 14 views
9

Ist es in Django möglich, das hochgeladene Bild zu ändern (zu skalieren), bevor es auf der Festplatte gespeichert wird? Ich würde das lieber ohne zusätzliche Apps machen.Django Größe während des Uploads ändern

+3

[Was Sie versucht haben?] (Http://whathaveyoutried.com) – arulmr

+0

Verwenden PIL für den Job: http://stackoverflow.com/questions/273946/how-do-i-resize-an -image-using-pil-and-maintain-it-aspect-ratio –

+0

Sie müssen eine externe Bibliothek oder eine App verwenden, um dies zu erreichen, da Django keine vordefinierten Methoden für das, was Sie tun möchten, haben. – Amyth

Antwort

19

Ich war verärgert, dass ich nicht ein komplettes Arbeitsbeispiel nur Bits hier und da finden konnte. Es ist mir gelungen, die Lösung selbst zusammenzustellen. Hier ist das vollständige Beispiel, ich habe es in clean() -Methode des Formulars (Sie können auch Modelle save() -Methode auf die gleiche Weise überschreiben - ImageField die Dateieigenschaft ändern).

import StringIO 
from PIL import Image 

image_field = self.cleaned_data.get('image_field') 
image_file = StringIO.StringIO(image_field.read()) 
image = Image.open(image_file) 
w, h = image.size 

image = image.resize((w/2, h/2), Image.ANTIALIAS) 

image_file = StringIO.StringIO() 
image.save(image_file, 'JPEG', quality=90) 

image_field.file = image_file 
+0

Danke für dieses Beispiel, aber ich verstehe nicht alles ... Was ist "info"? Ansonsten ist es in Python 3.x io.StringIO (...) – HydrUra

Verwandte Themen