web-dev-qa-db-fra.com

Comment exiger une dimension d'image minimale pour le téléchargement?

J'ai besoin d'un moyen d'empêcher les auteurs de télécharger des images sous des dimensions spécifiques.

Supposons que je souhaite uniquement autoriser le téléchargement d'images d'au moins 400 x 400 pixels. Si la taille de l'image est plus petite, l'auteur devrait recevoir une erreur indiquant que l'image est trop petite.

Y at-il un plugin ou un code qui peut accomplir cela?

17
boruchsiper

Ajoutez ce code au fichier functions.php de votre thème pour limiter les dimensions minimales de l’image.

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; 
}

Ensuite, changez simplement le nombre de dimensions minimales que vous souhaitez (mon exemple est 640 et 480)

25
Maor Barazany

Je préfère ne pas reformater le code d'un collègue.
Donc, c'est presque la même réponse que celle de @ MaorBarazany, mais en vérifiant le type mime, en modifiant la déclaration file['error'] et en modifiant l'espace de noms de la fonction en cet ID de question wpse.

En outre, la vérification ne se produit que pour les utilisateurs qui sont pas les administrateurs .

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;
}

Résultat de l'hameçon:

blocked image uploads

11
brasofilo