Автор: Пользователь скрыл имя, 04 Мая 2012 в 19:41, контрольная работа
В области программирования для сети PHP — один из популярных скриптовых языков (наряду с JSP, Perl и языками, используемыми в ASP.NET) благодаря своей простоте, скорости выполнения, богатой функциональности. Популярность в области построения веб-сайтов определяется наличием большого набора встроенных средств для разработки веб-приложений. Основные из них: автоматическое извлечение POST и GET-параметров, а также переменных окружения веб-сервера в предопределённые массивы;
Введение:
В области программирования
для сети PHP — один из популярных скриптовых
языков (наряду с JSP, Perl и языками, используемыми
в ASP.NET) благодаря своей простоте,
скорости выполнения, богатой функциональности.
Популярность в области построения веб-сайтов
Взаимодействие
с большим количеством различных систем
управления базами данных (MySQL, MySQLi, SQLite, Postgr
В настоящее
время PHP используется сотнями тысяч разработчиков.
Согласно рейтингу корпорации TIOBE, базирующемся
на данных поисковых систем, в апреле 2011
года PHP находился на 5 месте среди языков
программирования. К крупнейшим сайтам,
использующим PHP, относятся Facebook, ВКонтакте,
1.Работа
с изображением в PHP
В
данном материале мы рассмотрим некоторые
примеры манипуляции с
Например,
мы можем сделать негатив
Хорошо,
но как это работает? Очень просто.
Я беру картинку PNG, прохожу по каждому
пикселю этого изображения и передаю его
функции, которая принимает пиксель в
качестве параметра. Функция возвращает
мне новый пиксель. Я складываю все новые
пиксели и получаю новое изображение.
Класс для работы с пикселом
Для начала нам понадобится класс для работы с пикселом. Он очень прост – содержит в себе три значения: красного, зеленого и синего.
<?php class Pixel { function Pixel($r, $g, $b) { $this->g = ($g > 255) ? 255 : (($g < 0) ? 0 : (int)($g)); $this->b = ($b > 255) ? 255 : (($b < 0) ? 0 : (int)($b)); } } ?> |
Этот класс имеет только одну функцию – конструктор, которая сохраняет RGB значения пикселя.
Чтобы создать красный пиксел, вы просто делаете:
<?php $red = new Pixel(255, 0, 0); ?> |
Класс манипуляций с пикселами: главный метод
Далее
мы создаем класс, который проделывает
фактические действия с изображением.
Назовем его Image_
<?php class Image_PixelOperations { function $input_image, $output_image, $operation_ $factor = false ) { $image = imagecreatefr $x_dimension = imagesx $y_dimension = imagesy $new_image = imagecrea if ($operation_callback == ' $average_ } else { $average_ } for ($x = 0; $x < $x_dimension; $x for ( $r = ($rgb >> 16) & 0xFF; $g = ($rgb >> 8) & 0xFF; $b = $rgb & 0x $pixel = new Pixel($r, $g, $b); $pixel = call_ $ $pixel, $factor, $average_ $color = image $image, $pixel->r, imagesetpixel( } } imagepng($new_image, $ } } ?> |
Метод
принимает путь до файла. Никаких
проверок не производит, предполагая,
что это правильный PNG файл. Второй
параметр – это имя нового файла изображения.
Третий – функция, которая будет вызываться
для каждого пикселя. И последний параметр
– это любой дополнительный параметр,
который мы хотели бы передать в вызываемую
для пиксела функцию.
Добавляем шумов
И
так, пришло время, чтобы написать первую
функцию обработки пиксела: add
<?php function addNoise($pixel, { $random = mt_rand(-$ return new Pixel( $pixel->r $pixel->g $pixel->b ); } ?> |
Что
представляет из себя функция? Она получает
случайное число в указанном
пользователем диапазоне ($factor). И добавляет
его к значению каналов пиксела. Пользователь
указывает диапазон уровня шума: 0 –
нет шума, 255 – очень много шума.
<form
method="get"> <input name="image" /> <input type="submit" /> </form> |
Она принимает параметр – названия файла с изображением. После получения этого параметра я создаю новый объект класса для работы с пикселами:
<?php if (!empty($_GET['image'])) { $po =& new Image_PixelOperations(); } ?> |
Далее я показываю оригинальное изображение, а затем результат обработки.
<?php echo 'Оригинал: <br /><img src="'. $_GET['image'] .'" />'; echo '<hr />'; // Шумы $noise = 100; $po->pixelOperation($_GET[ echo echo '<hr />'; ?> |