Descubrí cómo usar PIL para obtener las dimensiones de la imagen, pero no el tamaño del archivo en bytes. Necesito saber el tamaño del archivo para decidir si el archivo es demasiado grande para cargarlo en la base de datos.Cómo obtener el tamaño de imagen (bytes) usando PIL
Respuesta
Probar:
import os
print os.stat('somefile.ext').st_size
¿Hay ahora forma de usar el PIL? –
¿Por qué necesitarías usar PIL? – thebjorn
para controlar si es una imagen, no un encabezado de imagen forjado, para crear un perfil de carga, y luego almacenarlo en la base de datos, por lo que es obvio hacer un método en PIL para obtener el tamaño en bytes no? –
estoy un poco tarde para esto, pero me encontré con esta pregunta hace 5 minutos cuando se busca la manera de obtener el tamaño de una imagen PIL sin guardarlo en el disco. En el caso de cualquier otra persona se encuentra con esto, esta es una forma sencilla de hacerlo:
import StringIO
output = StringIO.StringIO()
image_output.save(output, 'PNG') #a format needs to be provided
contents = output.getvalue()
output.close()
image_filesize = len(contents)
Si ya tiene la imagen en el sistema de archivos:
import os
os.path.getsize('path_to_file.jpg')`
Sin embargo, si usted quiere conseguir la tamaño de salvado de una imagen que está en la memoria y no se ha guardado en el sistema de archivos:
from io import BytesIO
img_file = BytesIO()
image.save(img_file, 'png')
image_file_size = img_file.tell()
Este método evitará varias lecturas de los datos de imagen al igual que con StringIO. Sin embargo, tenga en cuenta que usará más RAM. Todo es una compensación. :-)
Editar: Acabo de ver este comentario de la OP:
finalmente, el problema es de la a principios, si alguien va a subir una foto que tiene 1 giga (forjado uno) que' Mataré el servidor antes de que PIL haga lo suyo, ¡así que debo bloquear la solicitud antes de que termine!
Esta es una pregunta muy diferente, y probablemente se realice mejor en el servidor web. Para nginx, puede agregar esto a su configuración:
http {
#...
client_max_body_size 100m; # or whatever size you want as your limit
#...
}
El método 'BytesIO' parece subestimar el tamaño en comparación con obtener el tamaño del escritorio. ¿Alguna idea de por qué? – getup8
- 1. Cómo reducir el tamaño del archivo de imagen usando PIL
- 2. ¿Cómo cambio el tamaño de una imagen usando PIL y mantengo su relación de aspecto?
- 3. PIL cómo escalar el tamaño del texto en relación con el tamaño de la imagen
- 4. Contorno de imagen usando python/PIL
- 5. PIL Image.resize() no cambiar el tamaño de la imagen
- 6. Recortar la imagen usando PIL en python
- 7. ¿Cómo obtener el tamaño del recurso de imagen en bytes con PHP y GD?
- 8. jquery obtener tamaño de imagen
- 9. Obtener tamaño de imagen desde el controlador
- 10. Obtener tamaño de imagen real, después de cambiar el tamaño
- 11. Python PIL, imagen. Error después de image.load()
- 12. Rubí obtener el tamaño en bytes de una matriz
- 13. ¿Cómo obtener el tamaño original de una imagen -Jquery
- 14. ¿Cómo obtener el valor alfa de una imagen PNG con PIL?
- 15. tamaño de imagen bajo PhotoImage
- 16. ¿Cómo puedo cambiar el tamaño de una imagen usando Java?
- 17. Obtener el RGB de píxel con PIL
- 18. ¿Cómo obtener el tamaño de UIImage en Bytes en iOS 4.0+?
- 19. Obtener un objeto de imagen de una matriz de bytes
- 20. NumPy, PIL agregando una imagen
- 21. ¿Por qué la miniatura PIL no cambia el tamaño correctamente?
- 22. ¿Tamaño de bytes personalizado?
- 23. cambio de tamaño de imágenes con colores PIL cambia drásticamente
- 24. miniatura PIL está girando mi imagen?
- 25. Cambiar el tamaño de las imágenes en PIL en Tkinter
- 26. ¿Cómo cambiar el tamaño y dibujar una imagen usando wxpython?
- 27. Cómo obtener el tamaño de una imagen que se mantiene en una matriz de bytes en KB
- 28. cómo combinar una imagen PNG transparente con otra imagen usando PIL
- 29. Obtener tamaño de imagen de ByteArray
- 30. de todos modos para obtener el tamaño de archivo de imagen usando Javascript (jQuery o similares)
¿Está generando una imagen o la imagen está almacenada en el disco? –
Utilice la API del sistema de archivos para obtener el tamaño del archivo, no PIL. – wberry
o 'len()', si lo tiene en la memoria y no en el sistema de archivos (lo que parece probable si está almacenando como un BLOB en una base de datos) – geoffspear