Класс для загрузки изображений на сервер. Часть 1

Надо создать галерею, да ещё сделать надпись на изображении аля водяной знак, надо загрузить аватару? — не вопрос, предлагаю обратить внимание на универсальный класс для загрузки файлов class.upload.php. Сложно придумать функцию, которая не была бы встроена в это чудесный класс.

Итак, у нас есть самая простая форма:
<form enctype="multipart/form-data" method="post" action="upload.php">
<input type="file" size="32" name="image_field" value="">
<input type="submit" name="Submit" value="upload">
</form>

Прошу обратить внимание на multipart/form-data, без этого не будет сформирован ассоциативный массив $_FILES['image_field'].

Под катом привожу небольшой пример использования и перевод (неполный) основных операторов. Требуется помощь в полном переводе.

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

1. аватара должна быть масштабирована до размеров 100 на 100 px;
2. картинка должна переименовываться на лету в идентификатор авторизованного пользователя (таким образом легко сделать синхронизацию между записью в базе данный и именем аватары);
3. аватара в конечном итоге должна быть расширением строго *.jpg (необходима конвертация из других форматов);
4. загрузочный файл не более 50 килобайт;
5. минимальный размеры загружаемого файла 50 и 50 px по ширине и высоте соответственно;
6. качество результирующего файла 90%;
7. загружка должна происходить в определённую директорию;
8. при повторной загрузке старый файл должен быть перезаписан;
9. при возникновении ошибки сообщение должно быть на языке выбранным пользователем (имеется ввиду, что сайт изначально многоязычный).

Реализация:
require "../class/class.upload_0.29/class.upload.php";

if($_SESSION["s_lng"]=="ru"){ $handle = new upload($_FILES['avatara'], 'ru_RU'); };
if($_SESSION["s_lng"]=="en"){ $handle = new upload($_FILES['avatara']); };

if ($handle->uploaded){
    $handle->file_new_name_body   = $_SESSION['id_user'];
    $handle->image_resize         = true;
    $handle->image_x              = 100;
    $handle->image_y              = 100;
    $handle->image_min_width      = 50;
    $handle->image_min_height     = 50;
    $handle->file_max_size        = 1024*50;
    $handle->image_convert        = 'jpg';
    $handle->jpeg_quality         = 90;
    $handle->file_overwrite       = true;
    $handle->process($_SERVER['DOCUMENT_ROOT'].'/useravatara/');
    if ($handle->processed) {
        $handle->clean();
    }else{
        echo '<h1><font color="#cc0000">error</font></h1>' . $handle->error;
    };
};


Список операторов:

file_new_name_body даёт файлу новое имя (default: '')
$handle->file_new_name_body = 'new name';

file_name_body_add добавляет в конец имени файла «суффикс» (default: '')
$handle->file_name_body_add = '_uploaded';

file_name_body_pre добавляет в начало имени файла «приставку» (default: '')
$handle->file_name_body_pre = 'thumb_';

file_new_name_ext изменяет расширений файла, не путать с конвертацией (default: '')
$handle->file_new_name_ext = 'txt';

file_safe_name сохраняет имя файла, меняет пробелы на нижнее подчёркивание (default: true)
$handle->file_safe_name = true;

file_overwrite перезапись файла, если такой существует (default: false)
$handle->file_overwrite = true;

file_auto_rename автоматически переименовывает файл, если такой существует (default: true)
$handle->file_auto_rename = true;

auto_create_dir автоматически создаёт каталог, если его нет (default: true)
$handle->auto_create_dir = true;

dir_auto_chmod автоматически назначает CHMOD каталогу назначения, если не записываемый (default: true)
$handle->dir_auto_chmod = true;

dir_chmod назначает CHMOD каталогу назначения, если не записываемый (default: 0777)
$handle->dir_chmod = 0777;

file_max_size установка максимумального веса файла при загрузке (default: upload_max_filesize from php.ini)
$handle->file_max_size = '1024'; // 1KB

mime_check безопасный выбор MIME-типов (default: true)
$handle->mime_check = true;

no_script выполнение скриптов в загружаемых текстовых файлах (default: true)
$handle->no_script = false;

allowed array of allowed mime-types. wildcard accepted, as in image/* (default: check Init)
$handle->allowed = array('application/pdf','application/msword', 'image/*');

forbidden array of forbidden mime-types. wildcard accepted, as in image/* (default: check Init)
$handle->forbidden = array('application/*');

image_convert конвертация форматов (possible values: ''|'png'|'jpeg'|'gif'|'bmp'; default: '')
$handle->image_convert = 'jpg';

image_background_color if set, will forcibly fill transparent areas with the color, in hexadecimal (default: null)
$handle->image_background_color = '#FF00FF';

image_default_color fallback color background color for non alpha-transparent output formats, such as JPEG or BMP, in hexadecimal (default: #FFFFFF)
$handle->image_default_color = '#FF00FF';

jpeg_quality установка качества для JPEG файлов (default: 85)
$handle->jpeg_quality = 50;

jpeg_size if set to a size in bytes, will approximate jpeg_quality so the output image fits within the size (default: null)
$handle->jpeg_size = 3072;

image_max_width установка максимальной ширины в пикселях (default: null)
$handle->image_max_width = 200;

image_max_height установка максимальной высоты в пикселях (default: null)
$handle->image_max_height = 100;

image_max_pixels установка максимального количества пикселей (default: null)
$handle->image_max_pixels = 50000;

image_max_ratio установка максимального соотношения сторон (width/height) (default: null)
$handle->image_max_ratio = 1.5;

image_min_width установка минимальной ширины в пикселях (default: null)
$handle->image_min_width = 100;

image_min_height установка минимальной высоты в пикселях (default: null)
$handle->image_min_height = 500;

image_min_pixels установка минимального значения пикселей (default: null)
$handle->image_min_pixels = 20000;

image_min_ratio установка минимального соотношения сторон (width/height) (default: null)
$handle->image_min_ratio = 0.5;

image_resize делать ли масштабирование изображения или нет (ресайз) (default: false)
$handle->image_resize = true;

image_x установка ширины при ресайзе (default: 150)
$handle->image_x = 100;

image_y установка высоты при ресайзе (default: 150)
$handle->image_y = 200;

Use either one of the following

image_ratio if true, resize image conserving the original sizes ratio, using image_x AND image_y as max sizes if true (default: false)
$handle->image_ratio = true;

image_ratio_crop if true, resize image conserving the original sizes ratio, using image_x AND image_y as max sizes, and cropping excedent to fill the space. setting can also be a string, with one or more from 'TBLR', indicating which side of the image will be kept while cropping (default: false)
$handle->image_ratio_crop = true;

image_ratio_fill if true, resize image conserving the original sizes ratio, using image_x AND image_y as max sizes, fitting the image in the space and coloring the remaining space. setting can also be a string, with one or more from 'TBLR', indicating which side of the space the image will be in (default: false)
$handle->image_ratio_fill = true;

image_ratio_no_zoom_in same as image_ratio, but won't resize if the source image is smaller than image_x x image_y (default: false)
$handle->image_ratio_no_zoom_in = true;

image_ratio_no_zoom_out same as image_ratio, but won't resize if the source image is bigger than image_x x image_y (default: false)
$handle->image_ratio_no_zoom_out = true;

image_ratio_x if true, resize image, calculating image_x from image_y and conserving the original sizes ratio (default: false)
$handle->image_ratio_x = true;

image_ratio_y if true, resize image, calculating image_y from image_x and conserving the original sizes ratio (default: false)
$handle->image_ratio_y = true;

image_ratio_pixels if set to a long integer, resize image, calculating image_y and image_x to match a the number of pixels (default: false)
$handle->image_ratio_pixels = 25000;

В продолжении установки для манипуляций с подключенной библиотекой GD2+.

Комментарии (0)

RSS свернуть / развернуть

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.
Не забываем смотреть статистику:

Яндекс цитирования