2011-03-09 14 views
6

Quiero poner algunas restricciones a las imágenes cargadas por los usuarios, por lo que el script que las procesa nunca se queda sin memoria.¿Cómo calcular la memoria necesaria para procesar una imagen?

Las imágenes que requieren más memoria, son las que tienen una resolución más alta. No es necesario que tengan un gran tamaño en bytes. Por ejemplo, una imagen de 46 kb, con una resolución de 4000x2500 y algunas transparencias (PNG), tomó alrededor de 90 mb para redimensionarla.

¿Hay alguna forma de precalcular la memoria necesaria con precisión?

¿Alguna idea?

+1

No sé mucho sobre la manipulación de imágenes, pero ¿no estaría el tamaño del archivo de mapa de bits sin comprimir en el estadio general? – drudge

+0

Regla general que uso: horizontal * vertical * 4 solo para cargar la imagen usando GD, más el mismo cálculo para la imagen redimensionada ... en bytes –

Respuesta

3

Generalmente, la regla de oro es ancho x alto x 4 (rgba) para las imágenes de origen y de destino, y no se olvide de la cantidad de memoria que el script ya ha consumido.

+1

No funciona. Tengo esto: (4000 * 2462 + 300 * 185) * 4/1024/1024 = 37.78mb. El script, sin la parte de procesamiento de imagen, toma alrededor de 1mb. Con el procesamiento de imagen, toma 86.77mb. – HappyDeveloper

+0

Eso es peculiar, siempre me ha funcionado. Para probar, siempre puede intentar imprimir 'memory_get_usage (true)' antes y después de las llamadas de imagen para darle una idea de cuánto se está usando exactamente, y diseñar su propio algoritmo. – steveo225

+0

Quizás la biblioteca de imágenes que estoy usando esté haciendo algo estúpido. Pero lo probé con otra biblioteca, y sucedió lo mismo. Estoy seguro de que funciona bien si solo uso GD, entonces aceptaré tu respuesta. – HappyDeveloper

0

Usando la biblioteca de GD una vez que el archivo ha sido cargado, puede usar getimagesize(). Luego puede verificar el alto y el ancho para determinar si desea procesarlo o devolver un error, también devuelve la cantidad de bits utilizados por color si desea tenerlo en cuenta también.

Por lo tanto, su validación puede depender del tamaño y las dimensiones del archivo.

Cuestiones relacionadas