Загрузите минимальную ширину и высоту изображения

Поэтому я использую плагин Uplodify, чтобы пользователи могли загружать несколько изображений одновременно. Проблема в том, что мне нужно установить минимальную ширину и высоту для изображений. Допустим, 150 x 150 пикселей — это самое маленькое изображение, которое могут загрузить пользователи.

Как установить это ограничение в плагине Uploadify? Когда пользователь пытается загрузить меньшее изображение, я также хотел бы отобразить сообщение об ошибке.

Вот файл PHP, который называется плагином для загрузки изображений:

<?php

define('BASE_PATH', substr(dirname(dirname(__FILE__)), 0, -22));

// set the include path
set_include_path(BASE_PATH
                 . '/../library'
                 . PATH_SEPARATOR
                 . BASE_PATH
                 . '/library'
                 . PATH_SEPARATOR
                 . get_include_path());

// autoload classes from the library
function __autoload($class) {
    include str_replace('_', '/', $class) . '.php';
}

$configuration = new Zend_Config_Ini(BASE_PATH
                                     . '/application'
                                     . '/configs/application.ini',
                                     'development');
$dbAdapter = Zend_Db::factory($configuration->database);
Zend_Db_Table_Abstract::setDefaultAdapter($dbAdapter);

function _getTable($table)
{
    include BASE_PATH
    . '/application/modules/default/models/'
    . $table
    . '.php';
    return new $table();
}

$albums = _getTable('Albums');
$media = _getTable('Media');

if (false === empty($_FILES)) {

    $tempFile = $_FILES['Filedata']['tmp_name'];
    $extension = end(explode('.', $_FILES['Filedata']['name']));

    // insert temporary row into the database
    $data = array();
    $data['type'] = 'photo';
    $data['type2'] = 'public';
    $data['status'] = 'temporary';
    $data['user_id'] = $_REQUEST['user_id'];
    $paths = $media->add($data, $extension, $dbAdapter);

    // save the photo
    move_uploaded_file($tempFile,
                       BASE_PATH . '/public/' . $paths[0]);

    // create a thumbnail
    include BASE_PATH . '/library/My/PHPThumbnailer/ThumbLib.inc.php';
    $thumb = PhpThumbFactory::create(BASE_PATH . '/public/' . $paths[0]);
    $thumb->adaptiveResize(85, 85);
    $thumb->save(BASE_PATH . '/public/' . $paths[1]);

    // add watermark to the bottom right corner
    $pathToFullImage = BASE_PATH . '/public/' . $paths[0];
    $size = getimagesize($pathToFullImage);
    switch ($extension) {
        case 'gif':
            $im = imagecreatefromgif($pathToFullImage);
            break;
        case 'jpg':
            $im = imagecreatefromjpeg($pathToFullImage);
            break;
        case 'png':
            $im = imagecreatefrompng($pathToFullImage);
            break;
    }
    if (false !== $im) {
        $white = imagecolorallocate($im, 255, 255, 255);
        $font = BASE_PATH . '/public/fonts/arial.ttf';
        imagefttext($im,
                    13, // font size
                    0, // angle
                    $size[0] - 132, // x axis (top left is [0, 0])
                    $size[1] - 13, // y axis
                    $white,
                    $font,
                    'HunnyHive.com');
        switch ($extension) {
            case 'gif':
                imagegif($im, $pathToFullImage);
                break;
            case 'jpg':
                imagejpeg($im, $pathToFullImage, 100);
                break;
            case 'png':
                imagepng($im, $pathToFullImage, 0);
                break;
        }
        imagedestroy($im);
    }

    echo "1";

}

А вот и джаваскрипт:

$(document).ready(function() {    
    $('#photo').uploadify({
        'uploader'       : '/flash-uploader/scripts/uploadify.swf',
        'script'         : '/flash-uploader/scripts/upload-public-photo.php',
        'cancelImg'      : '/flash-uploader/cancel.png',
        'scriptData'     : {'user_id' : 'USER_ID'},
        'queueID'        : 'fileQueue',
        'auto'           : true,
        'multi'          : true,
        'sizeLimit'      : 2097152,
        'fileExt'        : '*.jpg;*.jpeg;*.gif;*.png',
        'wmode'          : 'transparent',
        'onComplete'     : function() {
            $.get('/my-account/temporary-public-photos', function(data) {
                $('#temporaryPhotos').html(data);
            });
        }
    });
    $('#upload_public_photo').hover(function() {
        var titles = '{';
        $('.title').each(function() {
            var title = $(this).val();
            if ('Title...' != title) {
                var id = $(this).attr('name');
                id = id.substr(5);
                title = jQuery.trim(title);
                if (titles.length > 1) {
                    titles += ',';
                }
                titles += '"' + id + '"' + ':"' + title + '"';
            }
        });
        titles += '}';
        $('#titles').val(titles);
    });
});

Теперь имейте в виду, что я знаю, как проверить размеры изображений в файле PHP. Но я не уверен, как изменить javascript, чтобы он не загружал изображения с очень маленькими размерами.


person Richard Knop    schedule 21.12.2009    source источник
comment
Держу пари, что javascript не может читать размеры изображения. Чтение данных из файлов на диске строго запрещено, когда вы находитесь в песочнице javascript. Flash или Java-апплет, вероятно, необходимы, если вы хотите читать эти вещи на стороне клиента.   -  person Frank Farmer    schedule 22.12.2009
comment
Нет. Изображения загружаются во временную папку на сервере, если все в порядке, они сохраняются в обычном месте на сервере для изображений. Все тесты и проверки я делаю на временных образах. Мне просто нужно знать, как получить доступ к ответу PHP в onComplete... и я не могу понять это из документации, которая довольно скудна.   -  person Richard Knop    schedule 22.12.2009


Ответы (1)


Вы получаете размер изображения в этой строке:

$size = getimagesize($pathToFullImage);

Почему бы не добавить здесь условное выражение, чтобы проверить, соответствует ли оно как минимум нужному вам размеру, и если оно не возвращает ошибку.

if($size[0] > 150 || $size[1] > 150) {
  return $someError;
}

Также похоже, что для Uploadify есть опция onError, которую вы можете установить: http://www.uploadify.com/documentation/

РЕДАКТИРОВАТЬ: Похоже, эта ветка может вам помочь: http://www.uploadify.com/forum/viewtopic.php?f=5&t=14

person bkildow    schedule 21.12.2009
comment
На самом деле onError срабатывает только в том случае, если перед загрузкой произошла ошибка, поэтому он срабатывает только перед вызовом PHP-скрипта. Мне нужно обработать ошибку в onComplete, я просто не знаю, как получить доступ к ответу из PHP-скрипта... - person Richard Knop; 22.12.2009