Как установить минимальный размер изображения при загрузке?

13 сент. 2011 г., 05:10:29
Просмотры: 27.3K
Голосов: 18

Мне нужен способ ограничить авторов от загрузки изображений меньше определенных размеров.

Допустим, я хочу разрешить загрузку только тех изображений, которые имеют размер не менее 400px x 400px. Если размер изображения меньше, автор должен получить уведомление об ошибке, что изображение слишком маленькое.

Есть ли плагин или код, который может это реализовать?

0
Все ответы на вопрос 2
4
27

Добавьте этот код в файл functions.php вашей темы, и он ограничит минимальные размеры загружаемых изображений

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"=>"Размеры изображения слишком малы. Минимальная ширина {$minimum['width']}px. Ширина загруженного изображения $width px");

    elseif ($height <  $minimum['height'])
        return array("error"=>"Размеры изображения слишком малы. Минимальная высота {$minimum['height']}px. Высота загруженного изображения $height px");
    else
        return $file; 
}

Затем просто измените значения минимальных размеров на нужные вам (в моём примере это 640 и 480)

13 сент. 2011 г. 17:48:24
Комментарии

Спасибо! Есть ли способ НЕ выполнять эту функцию, если мы включаем миниатюру записи?

Arthur Dos Santos Dias Arthur Dos Santos Dias
24 янв. 2012 г. 13:34:06

Это выполняется каждый раз при загрузке файла, на этапе, когда он ещё просто файл, до его категоризации или назначения миниатюрой. Вы можете добавить условие на основе имени файла с префиксом/суффиксом по вашему выбору, называть ваши файлы миниатюр соответственно, и тогда не выполнять функцию, если имя файла соответствует этому условию.

Maor Barazany Maor Barazany
22 февр. 2012 г. 01:38:59

В строке 14 нужно заменить "width" на "height", но в остальном это именно то, что мне было нужно.

User User
26 апр. 2012 г. 20:36:55

Отлично работает с Гутенбергом!

Jules Jules
1 апр. 2020 г. 17:00:28
2
12

Я предпочитаю не изменять форматирование кода коллеги.
Это практически тот же ответ, что и у @MaorBarazany, но с проверкой MIME-типа, изменением объявления file['error'] и использованием пространства имен функции, соответствующего ID данного вопроса wpse.

Также проверка выполняется только для пользователей, не являющихся администраторами.

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-типы изображений с возможностью проверки размеров, для раннего выхода
    $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'] = 
            'Изображение слишком маленькое. Минимальная ширина составляет ' 
            . $minimum['width'] 
            . 'px. Загруженное изображение имеет ширину ' 
            . $img[0] . 'px';

    elseif ( $img[1] < $minimum['height'] )
        $file['error'] = 
            'Изображение слишком маленькое. Минимальная высота составляет ' 
            . $minimum['height'] 
            . 'px. Загруженное изображение имеет высоту ' 
            . $img[1] . 'px';

    return $file;
}

Результат работы хука:

блокировка загрузки изображений

26 нояб. 2012 г. 05:03:55
Комментарии

Отличное решение, работает как часы. Однако есть одна проблема: если я хочу применять этот фильтр только к определенным типам записей, пользователи все равно могут выбрать изображение из Медиатеки, которое было загружено для другого типа записей (без требований к размеру), и оно не будет соответствовать этим требованиям.

cfx cfx
16 мая 2014 г. 04:32:12

Есть ли способ применять это только при загрузке миниатюры записи?

deathlock deathlock
14 окт. 2016 г. 12:11:50