images – Limitar la resolución de la imagen al cargarla

Pregunta:

Me encuentro con un problema en el que una imagen particularmente grande hace que mi servidor VPS se reinicie debido a problemas de memoria. La configuración de esto está fuera de mis manos, es algo así como el sistema de seguridad del host.

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

La imagen que estoy cargando no tiene un tamaño de archivo particularmente grande (~ 380 kb) y es principalmente negra con letras blancas. Sin embargo, su resolución es 4583 * 4583. Cuando lo subo a través de WordPress, aparece un error HTTP en la ventana de carga, y cuando reviso el sitio en vivo, está inactivo durante un par de minutos.

Me preguntaba si es posible detectar la resolución de una imagen y evitar que se cargue. Soy lo suficientemente inteligente como para jugar un poco en un procesador de imágenes, pero algunos de mis autores pueden no ser lo suficientemente inteligentes como para procesar la imagen antes de cargar algo tan grande como esto.

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

Respuesta:

El problema no es tanto la carga en sí, sino una conexión de red entre el cliente y el servidor. No es lo que está comiendo la memoria del servidor.

Cuando WordPress comienza a 'triturar' las imágenes, ahí es donde entra PHP y comienza a cambiar el tamaño y recortar las imágenes cargadas. Es antes de este momento que debe intervenir y realizar un par de comprobaciones antes de permitir que PHP se coma su memoria.

Usando el filtro wp_handle_upload_prefilter , puede conectar una función que realiza cualquier verificación que desee en la imagen que está a punto de ser procesada:

<?php 
/* Marc Dingena Utilities
 * Test image resolution before image crunch
 */
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 = "Image dimensions are too small. Minimum size is {$minimum['width']} by {$minimum['height']} pixels. Uploaded image is $image_width by $image_height pixels.";
    $too_large = "Image dimensions are too large. Maximum size is {$maximum['width']} by {$maximum['height']} pixels. Uploaded image is $image_width by $image_height pixels.";

    if ( $image_width < $minimum['width'] || $image_height < $minimum['height'] ) {
        // add in the field 'error' of the $file array the message 
        $file['error'] = $too_small; 
        return $file;
    }
    elseif ( $image_width > $maximum['width'] || $image_height > $maximum['height'] ) {
        //add in the field 'error' of the $file array the message
        $file['error'] = $too_large; 
        return $file;
    }
    else
        return $file;
}
?>

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım