Развивая глобальные темы в Perl, я не обойду и графику. Да да, в Перле можно мутить свои графические штучки, для этого есть свои модули и библиотеки. Самая глобальная это конечно же GD. Правда, сам модуль — лишь «пульт управления» главной библиотекой GD, которую, как ты уже наверное догадался, нужно установить. Качаем ее с
http://www.boutell.com/gd/
(версию 2.0.1 или выше), и пару библиотек к ней, а именно поддержку обработки png и jpg изображений (брать на
http://www.libpng.org/pub/png/libpng.html
и ftp://ftp.uu.net/graphics/jpeg
соответственно). Устанавливать бинарники ты наверное умеешь, так что учить тебя этому не буду, а так сказать перейду ближе к телу.

Итак, после установки библиотек, качай GD модуль и устанавливай это добро (для склерозников скажу список команд для этого: tar zxf GD-2.06.tar.gz && cd GD-2.06 && perl Makefile.PL && make && make test && make install).

Готово, GD установлен в твоей системе. Теперь можно будет написать тестовый скрипт, который покажет тебе, на что способен этот чудесный модуль.
Попробуем создать красивенький рисуночек из композиции геометрических фигур, так как стремление к составлению какой-либо фигуры на плоскости у меня нет, а показать, на что способен GD мне
охота.

Итак, поехали:

#!/usr/bin/perl

use GD; ## Юзаем модуль
print «Content-type: image/png\n\n»; ## Контент — png (можно jpg, но png мне больше симпатизирует)
# Вызываем конструктор new, для создания новой графической плоскости
$im = new GD::Image(100,100);

# Создаем несколько цветов (параметры — Red, Green, Blue)
$white = $im->colorAllocate(255,255,255);
$black = $im->colorAllocate(0,0,0);
$red = $im->colorAllocate(255,0,0);
$blue = $im->colorAllocate(0,0,255);

# Делаем беграунд прозрачным и врубаем опцию накладывания слоев
$im->transparent($white);
$im->interlaced(‘true’);

# Рисуем черную рамку
$im->rectangle(0,0,99,99,$black);

# Внутре овал с голубой коемочкой %)
$im->arc(50,50,95,75,0,360,$blue);

# Заливаем его красным
$im->fill(50,50,$red);

# Делаем binmode на вывод (запрещение замены спецсимволов по синтаксису языка)
binmode STDOUT;

# Конвертим изображение в png и выводим на экран браузера
print $im->png;

Вот, собственно, и весь скрипт. Рабочий его пример лежит в
http://kamensk.net.ru/forb/1/gd.pl. Как ты понял, тут присутствуют наиболее важные элементы геометрии. Для просмотра полного списка поройся в самом GD.pm, тебя там ждет хороший хелп с примерами.

А теперь собственно перейдем к взлому самих изображений :), напишем скриптик, который дарит цветы определенному человеку. Имеется изображение розочек. Наша задача открыть его GD’шным модулем, вставить туда строку: only for nick, где nick — параметр скрипта, и вывести изображение на экран 🙂 Ничего сложного, а людям приятно.

Итак, код:

#!/usr/bin/perl

use GD; ## Юзаем GD
use CGI qw(:standard); ## Юзаем парсер параметров
$name=param(‘to’); ## Вылавливаем параметр to из QUERY_STRING
if (!$name || length($name)>20) {
print «Content-type: text/html\n\n»;
exit print «Need a small parameter :(\n» ## Ругаемся, если этот параметр большой, либо его нет
}
print «Content-type: image/jpeg\n\n»; ## Конвертим в jpg, для разнообразия 😉
open(JPG,»rose.jpg»); ## Открываем картинку — три розочки
$image=newFromJpeg GD::Image(JPG); ## Создаем плоскость с заданным изображением розочек 
$white = $image->colorAllocate(255,255,255); ## Создаем белый цвет
binmode STDOUT; ## Включаем binmode
$image->string(gdGiantFont,95-(length($name)*2),188,»Only for $name»,$white); ## Пишем посередине, внизу изображения любовную надпись 😉
print $image->jpeg; ## И выводим картинку на экран.

После просмотра этого
скрипта и сравнения его с картинкой, ты поймешь, что GD достаточно жестоко портит изображения… То есть ломая его код делает его малокачественным. Это прослеживается не только в Perl, но и в PHP (то есть делаем вывод, что так надо) 😉

Немного фантазии, и с помощью Perl ты можешь творить свои собственные
галереи, превращая свой сайт в произведение искусства.

Удачи!

Оставить мнение

Check Also

ОС максимальной секретности. Выбираем дистрибутив для обхода блокировок и защиты от слежки

Возможно, ты уже пользовался дистрибутивом Tails или даже запускаешь его ежедневно. Но это…