How to Require a Minimum Image Dimension for Uploading?

I need a way to restrict authors from uploading images bellow specific dimensions.

Say I only want to allow uploading images that are at least 400px x 400px. If the image size is smaller, the author should get an error notice that the image is too small.

Read More

Is there a plugin or code that can accomplish this?

Related posts

Leave a Reply

2 comments

  1. Add this code to your theme’s functions.php file, and it will limit minimum image dimentions

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

    Then just change the numbers of the minimum dimensions you want (in my example is 640 and 480)

  2. I prefer not to reformat a colleague’s code.
    So, this is almost the same answer as @MaorBarazany’s, but checking the mime type, changing the file['error'] declaration and changing the function namespace to this wpse Question ID.

    Also, the check only occurs for users that are not administrators.

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

    Result of the hook:

    blocked image uploads