Просмотров: 1200

Игры с картинками :-) или обработка изображений на стороне сервера.

Смотрим как это работает.

Что если загруженную на сервер фотографию необходимо чуть-чуть подправить, а фотошоп или какой-нибудь другой графический редактор не установлен? Оказывается PHP с библиотекой GD способны помочь нам в этом вопросе. Итак к делу:

1) Скачиваем архив, рассматриваем структуру файлов.
  • im.html(view) - здесь выводятся изображения, панель управления, подключается prototype.js(используем Ajax).
  • im.php(controller) - принимаем $_POST данные, подключаем class.imageManipulation.php
  • class.imageManipulation.php(model) - обрабатываем изображение в зависимости от входящих данных.
2)Разбираем детально view структуру: ближе к началу файла находятся JS функции, для наглядности они разделены на imageManipulation(), imageContrast(), imageColorize().

function imageManipulation(filename, effect){
var url = 'im.php';
var pars = 'effect='+effect+'&filename='+filename;
var el = 'new_img';
var myAjax = new Ajax.Updater(el, url, {method: 'post', parameters: pars});
}
Расковыряем самую простую из них imageManipulation(), аргументы: путь к файлу, название эффекта. Эта информация передается в ...

3) ...controller:
include_once( 'class.imageManipulation.php' );

$img_path = $_SERVER['DOCUMENT_ROOT'].'/pics/' . $_POST['filename'];

$m_img = new imageManipulationClass( $img_path );
$orig_path = str_replace( '_ex', '_s', $img_path );

switch( $_POST['effect'] ){
case 'gray':
$m_img->imageFilterGray();
break;
....
default:
echo ( 'No filter' );
}
$m_img->imageSave( $img_path );
Подключаем class.imageManipulation.php, определяемся с путями, создаём экземпляр класса $m_img, узнаем путь к изображению оригиналу, запускаем switch и в зависимости от желаемого эффекта заставляем срабатывать метод класса, сохраняем imageSave и выводим изображение.

4) model:

function imageFilterGray(){
imagefilter( $this->img_source, IMG_FILTER_GRAYSCALE );
return $this->img_source;
}

Сдесь происходит куча вспомогательной работы, но самое главное очень просто - например imageFilterGray() думаю и так все понятно grin


Думаю все можно было бы сделать более универсально, но я намеренно постарался пойти по пути максимально понятной структуры кода. Если есть вопросы - задавайте wink

P.S. Кстати, эффекты накладываются друг на друга и благодаря этому можно добиться удивительных результатов. В крайнем случае всегда можно нажать на кнопочку Clear cool smile
]]>twitter.com Google Buzz google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru]]>


Теги:

Эта запись опубликована: Воскресенье, 4 января 2009 в рубрике PHP.

2 комментария

Следите за комментариями по RSS
  1. Только нужно не забыть сделать функцию отката на всякий случай. А то, вдруг, пользователю не понравится манипуляция smile

  2. Штембуляк Андрей aka Zmei

    Да, там есть в самом низу Clear grin

Оставьте комментарий!

Не регистрировать/аноним

Используйте нормальные имена.

Зарегистрировать/комментатор

Для регистрации укажите свой действующий email и пароль. Связка email-пароль позволяет вам комментировать и редактировать данные в вашем персональном аккаунте, такие как адрес сайта, ник и т.п. (Письмо с активацией придет в ящик, указанный при регистрации)

grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

(обязательно)