Limitar la resolución de imágenes al subirlas

17 ene 2014, 23:29:13
Vistas: 18.1K
Votos: 7

Estoy teniendo un problema donde una imagen particularmente grande está causando que mi servidor VPS se reinicie debido a problemas de memoria. La configuración de esto está fuera de mi control, es como un mecanismo de seguridad del host.

Tengo un VPS con 300M de memoria, que creo que es suficiente para mi instalación de WordPress, al menos para las operaciones diarias.

La imagen que estoy subiendo no es particularmente grande en tamaño de archivo (~380 kb) y es mayormente negra con letras blancas. Sin embargo, su resolución es de 4583 * 4583. Cuando la subo a través de WordPress, obtengo un error HTTP en la ventana de carga, y cuando reviso el sitio en vivo, está caído por unos minutos.

Me preguntaba si es posible detectar la resolución de una imagen y prevenir que se suba. Soy lo suficientemente hábil para manipular un poco un editor de imágenes, pero algunos de mis autores pueden no ser tan expertos para procesar la imagen antes de subir algo tan grande como esto.

Sería incluso mejor si la limitación pudiera basarse en los bits por píxel de la imagen, pero no tengo idea de cuál es el límite de mi servidor para esto, así que supongo que un mensaje de error diciendo que la imagen no puede subirse porque es más grande que, digamos, 2000 * 2000 sería suficiente.

0
Todas las respuestas a la pregunta 4
0
13

El problema no es tanto la subida en sí, ya que eso es una conexión de red entre el cliente y el servidor. No es lo que consume la memoria del servidor.

Cuando WordPress comienza a 'procesar' las imágenes, es ahí donde PHP entra en acción y comienza a redimensionar y recortar las imágenes subidas. Es antes de este momento cuando necesitas intervenir y realizar algunas verificaciones antes de permitir que PHP consuma tu memoria.

Usando el filtro wp_handle_upload_prefilter, puedes enlazar una función que realice cualquier verificación que desees en la imagen que está a punto de ser procesada:

<?php 
/* Marc Dingena Utilities
 * Verificar resolución de imagen antes del procesamiento
 */
add_filter('wp_handle_upload_prefilter','mdu_validate_image_size');
function mdu_validate_image_size( $file ) {
    $image = getimagesize($file['tmp_name']);
    $minimum = array(
        'width' => '400',
        'height' => '400'
    );
    $maximum = array(
        'width' => '2000',
        'height' => '2000'
    );
    $image_width = $image[0];
    $image_height = $image[1];

    $too_small = "Las dimensiones de la imagen son demasiado pequeñas. El tamaño mínimo es {$minimum['width']} por {$minimum['height']} píxeles. La imagen subida tiene $image_width por $image_height píxeles.";
    $too_large = "Las dimensiones de la imagen son demasiado grandes. El tamaño máximo es {$maximum['width']} por {$maximum['height']} píxeles. La imagen subida tiene $image_width por $image_height píxeles.";

    if ( $image_width < $minimum['width'] || $image_height < $minimum['height'] ) {
        // agregar en el campo 'error' del array $file el mensaje 
        $file['error'] = $too_small; 
        return $file;
    }
    elseif ( $image_width > $maximum['width'] || $image_height > $maximum['height'] ) {
        // agregar en el campo 'error' del array $file el mensaje
        $file['error'] = $too_large; 
        return $file;
    }
    else
        return $file;
}
?>
17 ene 2014 23:29:13
2

Para un plugin, prueba http://wordpress.org/plugins/imsanity/ que ayudará a evitar que otros usuarios del sitio suban imágenes demasiado grandes.

Imsanity redimensiona automáticamente las imágenes enormes al subirlas a un tamaño más razonable para mostrar en el navegador, pero que sigue siendo más que suficiente para el uso típico en un sitio web. El plugin es configurable con un ancho máximo, alto y calidad. Cuando un colaborador sube una imagen que es más grande que el tamaño configurado, Imsanity la escalará automáticamente al tamaño configurado y reemplazará la imagen original.

17 ene 2014 23:54:07
Comentarios

En relación al consumo de memoria PHP de WordPress al procesar imágenes, ¿cómo dirías que se compara este plugin? ¿No haría que el servidor colapse igualmente?

Marc Dingena Marc Dingena
18 ene 2014 00:04:33

Este plugin es bueno para mantener bajo el espacio total en disco utilizado debido a cargas de imágenes originales muy grandes, pero esa no es la pregunta que se está haciendo. Imsanity no es una solución para el problema de que la carga original falle al procesarse porque sus dimensiones en píxeles son tan grandes que PHP colapsa por falta de memoria disponible.

squarecandy squarecandy
25 ene 2017 04:56:26
0

Es posible que tu servidor tenga suficiente memoria para realizar la tarea, pero que el límite de memoria en PHP sea demasiado bajo para convertir imágenes muy grandes.

Intenta configurar memory_limit en php.ini con un valor más alto.

memory_limit=256M

*Nota: Esta podría no ser una solución apropiada en algunos entornos de hosting.

25 ene 2017 05:32:06
0

Para un plugin, prueba https://es.wordpress.org/plugins/cheetaho-image-optimizer/ y eso ayudará a evitar que otros usuarios del sitio suban imágenes demasiado grandes.

8 may 2024 04:53:54