2011-01-07 10 views
9

Más específicamente, quiero cambiar el tipo de archivo de una imagen cargada a través de un Django ImageField.¿Cómo puedo crear una imagen PIL desde un archivo en memoria?

Mi idea actual es crear un ImageField personalizado y sobrescribir el método de guardar para manipular el archivo.

Tengo problemas para obtener un archivo en la memoria debido a una instancia de la imagen PIL.

Gracias por la ayuda.

Respuesta

11

Nota que Django ImageField hereda el método de openFieldFile. Esto devuelve un objeto de secuencia que se puede pasar a la PIL Image.open (el método estándar de fábrica para crear Image objetos de un flujo de imágenes):

stream = imagefield.open() 
image = Image.open(stream) 
stream.close() 
# ... and then save image with: image.save(outfile, format, options) 

Ver PIL Image documentation.

+1

Acabo de darme cuenta de eso. Gracias. – Zach

+0

'stream.close()' volcará la referencia al archivo? Si quisiera hacer 'stream.thumbnail (200x200, 'png')' ¿cómo debo administrar 'stream.close()'? – tutuca

+1

abierto devuelve 'Ninguno' aquí http://dpaste.de/HqFCF/ ... – tutuca

Cuestiones relacionadas