2013-03-20 17 views
9

In Django, è possibile modificare (ridimensionare) l'immagine caricata prima che venga salvata sul disco? Preferirei farlo senza usare app aggiuntive.Immagine di ridimensionamento di Django durante il caricamento

+3

[Che cosa hai provato?] (Http://whathaveyoutried.com) – arulmr

+0

Utilizzare PIL per il lavoro: http://stackoverflow.com/questions/273946/how-do-i-resize-an -image-using-pil-and-maintain-its-aspect-ratio –

+0

è necessario utilizzare una libreria esterna o un'app per raggiungere questo obiettivo poiché django non ha metodi predefiniti per ciò che si sta cercando di fare. – Amyth

risposta

19

ero infastidito dal fatto che non riuscivo a trovare un esempio di lavoro completo, solo pezzi qua e là. Sono riuscito a mettere insieme la soluzione da solo. Ecco l'esempio completo, l'ho inserito nel metodo clean() del modulo (puoi anche sovrascrivere il metodo save(), nello stesso modo - cambiando la proprietà del file di ImageField).

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

Grazie per questo esempio, ma non capisco tutto ... Che cos'è "info"? Altrimenti, in python 3.x è io.StringIO (...) – HydrUra

Problemi correlati