Como exigir uma dimensão mínima de imagem para upload?

16

Eu preciso de uma maneira de restringir os autores de fazer o upload de imagens abaixo de dimensões específicas.

Digamos que eu só queira permitir o upload de imagens com pelo menos 400px x 400px. Se o tamanho da imagem for menor, o autor deve receber um aviso de erro de que a imagem é muito pequena.

Existe algum plugin ou código que possa fazer isso?

    
por boruchsiper 13.09.2011 / 04:10

2 respostas

24

Adicione este código ao arquivo functions.php do seu tema, e ele limitará as dimensões mínimas da imagem

add_filter('wp_handle_upload_prefilter','tc_handle_upload_prefilter');
function tc_handle_upload_prefilter($file)
{

    $img=getimagesize($file['tmp_name']);
    $minimum = array('width' => '640', 'height' => '480');
    $width= $img[0];
    $height =$img[1];

    if ($width < $minimum['width'] )
        return array("error"=>"Image dimensions are too small. Minimum width is {$minimum['width']}px. Uploaded image width is $width px");

    elseif ($height <  $minimum['height'])
        return array("error"=>"Image dimensions are too small. Minimum height is {$minimum['height']}px. Uploaded image height is $height px");
    else
        return $file; 
}

Em seguida, basta alterar os números das dimensões mínimas desejadas (no meu exemplo é 640 e 480)

    
por Maor Barazany 13.09.2011 / 16:48
10

Eu prefiro não reformatar o código de um colega.
Portanto, esta é quase a mesma resposta que a do @MaorBarazany, mas verificando o tipo MIME, alterando a declaração file['error'] e alterando o espaço de nomes da função para este ID de pergunta wpse.

Além disso, a verificação ocorre apenas para usuários que não são administradores .

add_action( 'admin_init', 'wpse_28359_block_authors_from_uploading_small_images' );

function wpse_28359_block_authors_from_uploading_small_images()
{
    if( !current_user_can( 'administrator') )
        add_filter( 'wp_handle_upload_prefilter', 'wpse_28359_block_small_images_upload' ); 
}

function wpse_28359_block_small_images_upload( $file )
{
    // Mime type with dimensions, check to exit earlier
    $mimes = array( 'image/jpeg', 'image/png', 'image/gif' );

    if( !in_array( $file['type'], $mimes ) )
        return $file;

    $img = getimagesize( $file['tmp_name'] );
    $minimum = array( 'width' => 640, 'height' => 480 );

    if ( $img[0] < $minimum['width'] )
        $file['error'] = 
            'Image too small. Minimum width is ' 
            . $minimum['width'] 
            . 'px. Uploaded image width is ' 
            . $img[0] . 'px';

    elseif ( $img[1] < $minimum['height'] )
        $file['error'] = 
            'Image too small. Minimum height is ' 
            . $minimum['height'] 
            . 'px. Uploaded image height is ' 
            . $img[1] . 'px';

    return $file;
}

Resultado do gancho:

  

    
por brasofilo 26.11.2012 / 04:03