¿Cómo puede configurar el ancho máximo para las imágenes originales?

11

Caso: Tengo un cliente que no sabe mucho sobre el mundo digital. Sin embargo, lo que sí sabe es cómo obtener las fotos de su cámara en la computadora y en WordPress. Sin embargo, ella no sabe cómo reducir el tamaño de las fotos a un tamaño normal.

Solución: Me gusta WordPress para reducir automáticamente el tamaño de esas fotos en el fondo a un ancho máximo de 1024 píxeles.

Problema: Aunque puedo establecer el ancho máximo en la configuración, puedo configurar $ content_width y puedo agregar nuevos tamaños de imagen con 'add_image_size'. La foto original todavía se almacena en la carpeta de carga en su tamaño original. Lo que significa que el espacio del disco duro se llenará fácilmente.

Pregunta: ¿Qué debo poner en functions.php para permitir que WordPress reduzca el tamaño de la imagen original (si es más grande que el ancho máximo)?

    
pregunta Mark 19.12.2012 - 15:07

2 respuestas

6

Pude resolverlo usando el siguiente código:

function my_handle_upload ( $params )
{
    $filePath = $params['file'];

    if ( (!is_wp_error($params)) && file_exists($filePath) && in_array($params['type'], array('image/png','image/gif','image/jpeg')))
    {
        $quality                        = 90;
        list($largeWidth, $largeHeight) = array( get_option( 'large_size_w' ), get_option( 'large_size_h' ) );
        list($oldWidth, $oldHeight)     = getimagesize( $filePath );
        list($newWidth, $newHeight)     = wp_constrain_dimensions( $oldWidth, $oldHeight, $largeWidth, $largeHeight );

        $resizeImageResult = image_resize( $filePath, $newWidth, $newHeight, false, null, null, $quality);

        unlink( $filePath );

        if ( !is_wp_error( $resizeImageResult ) )
        {
            $newFilePath = $resizeImageResult;
            rename( $newFilePath, $filePath );
        }
        else
        {
            $params = wp_handle_upload_error
            (
                $filePath,
                $resizeImageResult->get_error_message() 
            );
        }
    }

    return $params;
}
add_filter( 'wp_handle_upload', 'my_handle_upload' );

El archivo original era 3,3Mb después de cargarse, con grandes dimensiones configuradas en 2048x2048, solo se tomaron 375Kb en el servidor (aproximadamente un 90% de reducción!)

    
respondido por el Mark 19.12.2012 - 16:29
3

Ya se ha cambiado el tamaño para crear los tamaños grande / medio / pulgar, pero el problema al que se enfrenta es que la imagen es demasiado grande para cambiar el tamaño, ya sea por falta de memoria o por tiempo.

Así que cambiar el tamaño no es una opción, si no lo fuera, no tendrías tu problema. En su lugar, intente limitar las imágenes, por lo que si ocurre una carga de 20 MB, se deniega con un mensaje que indica que debe reducirse.

Limitación basada en área de imagen / megapíxeles:

<?php
/**
 * Plugin Name: Deny Giant Image Uploads
 * Description: Prevents Uploads of images greater than 3.2MP
 */

function tomjn_deny_giant_images($file){
    $type = explode('/',$file['type']);

    if($type[0] == 'image'){
        list( $width, $height, $imagetype, $hwstring, $mime, $rgb_r_cmyk, $bit ) = getimagesize( $file['tmp_name'] );
        if($width * $height > 3200728){ // I added 100,000 as sometimes there are more rows/columns than visible pixels depending on the format
            $file['error'] = 'This image is too large, resize it prior to uploading, ideally below 3.2MP or 2048x1536';
        }
    }
    return $file;
}
add_filter('wp_handle_upload_prefilter','tomjn_deny_giant_images');

Limitación basada en ancho o alto:

enlace

<?php
/** Plugin Name: (#67107) »kaiser« Restrict file upload */

function wpse67107_restrict_upload( $file )
{
    $file_data = getimagesize( $file );
    // Handle cases where we can't get any info:
    if ( ! $file_data )
        return $file;

    list( $width, $height, $type, $hwstring, $mime, $rgb_r_cmyk, $bit ) = $file_data;

    // Add conditions when to abort
    if ( $width > 2048 )
        $file['error'] = 'Error statement';

    return $file;
}
add_filter( 'wp_handle_upload_prefilter', 'wpse67107_restrict_upload' );

Limitar por área permitiría imágenes altas / delgadas o anchas / cortas que se pueden redimensionar, limitar por dimensiones puede ser más fácil de explicar

    
respondido por el Tom J Nowell 19.12.2012 - 15:27

Lea otras preguntas en las etiquetas