2009-12-21 1 views
1

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

Как установить это ограничение в плагине 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"; 

} 

А вот JavaScript:

$(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, чтобы он не загружал изображения с очень маленькими размерами.

+0

I 'd пари, что javascript не может читать размеры изображения. Чтение данных из файлов на диске строго verboten, когда вы находитесь в javascript sandbox. Flash, или Java-апплет, вероятно, необходимы, если вы хотите прочитать эти вещи на стороне клиента. –

+0

Нет. Изображения загружаются во временную папку на сервере, если все в порядке, они сохраняются в обычном местоположении сервера для изображений. Я выполняю все тесты и проверки временных изображений. Мне просто нужно знать, как получить доступ к ответу PHP в onComplete ... и я не могу понять это из документации, которая довольно скудная. –

ответ

4

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

$size = getimagesize($pathToFullImage); 

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

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

Кроме того, похоже, есть вариант OnError для Uploadify, которые вы можете установить: http://www.uploadify.com/documentation/

EDIT: Эта нить выглядит как это может быть какой-то помочь вам: http://www.uploadify.com/forum/viewtopic.php?f=5&t=14

+0

Фактически onError запускается только при наличии ошибки перед загрузкой, поэтому он запускается только перед вызовом PHP-скрипта. Мне нужно обработать ошибку в onComplete, я просто не знаю, как получить доступ к ответу из PHP-скрипта ... –

Смежные вопросы