Работа с изображением в PHP

Автор: Пользователь скрыл имя, 04 Мая 2012 в 19:41, контрольная работа

Описание работы

В области программирования для сети PHP — один из популярных скриптовых языков (наряду с JSP, Perl и языками, используемыми в ASP.NET) благодаря своей простоте, скорости выполнения, богатой функциональности. Популярность в области построения веб-сайтов определяется наличием большого набора встроенных средств для разработки веб-приложений. Основные из них: автоматическое извлечение POST и GET-параметров, а также переменных окружения веб-сервера в предопределённые массивы;

Работа содержит 1 файл

Работа с изображением в PHP.doc

— 1,022.00 Кб (Скачать)

Введение: 

    В области программирования для сети PHP — один из популярных скриптовых языков (наряду с JSPPerl и языками, используемыми в ASP.NET) благодаря своей простоте, скорости выполнения, богатой функциональности.  Популярность в области построения веб-сайтов определяется наличием большого набора встроенных средств для разработки веб-приложений. Основные из них: автоматическое извлечение POST и GET-параметров, а также переменных окружения веб-сервера в предопределённые массивы;

    Взаимодействие с большим количеством различных систем управления базами данных (MySQLMySQLiSQLitePostgreSQL,Oracle (OCI8), OracleMicrosoft SQL ServerSybaseODBCmSQLIBM DB2Cloudscape и Apache DerbyInformixOvrimos SQL,Lotus NotesDB++DBMdBaseDBXFrontBaseFileProIngres IISESAMFirebird InterBaseParadox File AccessMaxDB,Интерфейс PDO.

   В настоящее время PHP используется сотнями тысяч разработчиков. Согласно рейтингу корпорации TIOBE, базирующемся на данных поисковых систем, в апреле 2011 года PHP находился на 5 месте среди языков программирования. К крупнейшим сайтам, использующим PHP, относятся FacebookВКонтакте, Wikipedia. 
 
 
 
 
 
 

1.Работа с изображением в PHP 

    В данном материале мы рассмотрим некоторые  примеры манипуляции с изображением при помощи библиотеки GD, а именно – операции с пикселями. Манипуляции с пикселом означают, что действие будет относиться только к нему не затрагивая все окружающие пиксели.

    Например, мы можем сделать негатив изображения. Для этого берем каждый пиксель  в изображении и заменяем его  противоположным цветом.

    Хорошо, но как это работает? Очень просто. Я беру картинку PNG, прохожу по каждому пикселю этого изображения и передаю его функции, которая принимает пиксель в качестве параметра. Функция возвращает мне новый пиксель. Я складываю все новые пиксели и получаю новое изображение. 
 

Класс для работы с пикселом

    Для начала нам понадобится класс для работы с пикселом. Он очень прост – содержит в себе три значения: красного, зеленого и синего.

 
 
<?php  
class Pixel {  
    function 
Pixel($r$g$b)  
    {  
        
$this->= ($r 255) ? 255 : (($r 0) ? : (int)($r));  
        
$this->= ($g 255) ? 255 : (($g 0) ? : (int)($g));  
        
$this->= ($b 255) ? 255 : (($b 0) ? : (int)($b));  
    }  
}  
?>

 
 
 
 
 

    Этот  класс имеет только одну функцию  – конструктор, которая сохраняет RGB значения пикселя.

    Чтобы создать красный пиксел, вы просто делаете:

<?php  
$red 
= new Pixel(25500);  
?> 

 
 

Класс манипуляций с  пикселами: главный  метод

    Далее мы создаем класс, который проделывает  фактические действия с изображением. Назовем его Image_PixelOperations(). Все, что мне было нужно – это более простой метод для открытия PNG файлов, который бы проходил по каждому пикселу файла, вызывает функцию, получает новый пиксел и присваивает его новому изображению. Далее приведу текст метода:

 
 
<?php  
class Image_PixelOperations  
          
    function 
pixelOperation(  
            
$input_image,  
            
$output_image,  
            
$operation_callback,  
            
$factor false  
            
)  
    {  
          
        
$image imagecreatefrompng($input_image);  
        
$x_dimension imagesx($image);  
        
$y_dimension imagesy($image);  
        
$new_image imagecreatetruecolor($x_dimension$y_dimension);  
          
        if (
$operation_callback == 'contrast') {  
            
$average_luminance $this->getAverageLuminance($image);  
        } else {  
            
$average_luminance false;  
        }  
          
        for (
$x 0$x $x_dimension$x++) {  
            for (
$y 0$y $y_dimension$y++) {  
          
                
$rgb imagecolorat($image$x$y);  
                
$r = ($rgb >> 16) & 0xFF;  
                
$g = ($rgb >> 8) & 0xFF;  
                
$b $rgb 0xFF;  
          
                
$pixel = new Pixel($r$g$b);  
                
$pixel call_user_func(  
                    
$operation_callback,  
                    
$pixel,  
                    
$factor,  
                    
$average_luminance  
                
);  
          
                
$color imagecolorallocate(  
                    
$image,  
                    
$pixel->r,  
                    
$pixel->g,  
                    
$pixel-> 
                
);  
                
imagesetpixel($new_image$x$y$color);  
            }  
          
        }  
          
        
imagepng($new_image$output_image);  
    }  
}  
          
?>

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

Добавляем шумов

    И так, пришло время, чтобы написать первую функцию обработки пиксела: addNoise(). Добавление шума к изображению означает добавление случайного значения к каждому каналу пикселя.  Что такое канал – уровень красного цвета в пикселе = канал, Тоже самое с зеленым и синим. Далее привожу функцию:

 
 
<?php  
    
function addNoise($pixel$factor)  
    {  
        
$random mt_rand(-$factor$factor);  
        return new 
Pixel(  
                    
$pixel->$random,  
                    
$pixel->$random,  
                    
$pixel->$random  
                
);  
    }  
?> 

 

    Что представляет из себя функция? Она получает случайное число в указанном  пользователем диапазоне ($factor). И добавляет его к значению каналов пиксела. Пользователь указывает диапазон уровня шума: – нет шума, 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['image'], 'result_noise.png', array($po'addNoise'), $noise);  
    echo 
'<br />Добаляем шумы (factor '$noise .'): <br /><img src="result_noise.png" />';  
    echo 
'<hr />';  
          
?> 

Информация о работе Работа с изображением в PHP