Развивая глобальные темы в 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 ты можешь творить свои собственные
галереи, превращая свой сайт в произведение искусства.

Удачи!

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии