2011-09-23 23 views
5

Estoy tratando de verificar la dimensión de una imagen, antes de guardarla. No necesito cambiarlo, solo asegúrate de que se ajuste a mis límites.Convertir una imagen de UploadedFile a PIL en Django

En este momento, puedo leer el archivo y guardarlo en AWS sin ningún problema.

output['pic file'] = request.POST['picture_file'] 
conn = myproject.S3.AWSAuthConnection(aws_key_id, aws_key) 
filedata = request.FILES['picture'].read() 
content_type = 'image/png' 
conn.put(
     bucket_name, 
     request.POST['picture_file'], 
     myproject.S3.S3Object(filedata), 
     {'x-amz-acl': 'public-read', 'Content-Type': content_type}, 
     ) 

Necesito poner un paso en el medio, eso asegura que el archivo tenga las dimensiones correctas de tamaño/ancho. Mi archivo no proviene de un formulario que utiliza ImageField, y todas las soluciones que he visto usan eso.

¿Hay una manera de hacer algo como

img = Image.open(filedata) 

Respuesta

1

que he hecho esto antes, pero no puedo encontrar mi viejo fragmento ... así que aquí vamos de la parte superior de mi cabeza

picture = request.FILES.get['picture'] 
img = Image.open(picture) 
#check sizes .... probably using img.size and then resize 

#resave if necessary 
imgstr = StringIO() 
img.save(imgstr, 'PNG') 
imgstr.reset() 

filedata = imgstr.read() 
+0

El objeto StringIO es lo que me faltaba para almacenar mi imagen temporalmente en la memoria. ¡Gracias! – Mashakal

3
image = Image.open(file) 
#To get the image size, in pixels.  
(width,height) = image.size() 
#check for dimensions width and height and resize 
image = image.resize((width_new,height_new)) 
+0

(ancho, alto) = image.size no size() –

1

el código de abajo crea la imagen a partir de la solicitud, como quiera:

from PIL import ImageFile 
def image_upload(request): 
    for f in request.FILES.values(): 
     p = ImageFile.Parser() 
     while 1: 
      s = f.read(1024) 
      if not s: 
       break 
      p.feed(s) 
     im = p.close() 
     im.save("/tmp/" + f.name) 
Cuestiones relacionadas