Moduł Imager

Uniwersytet Gdański - Instytut Matematyki - Zakład Informatyki - Strona domowa

Co to jest

Moduł Imager jest to narzędzie do generowania 24 bitowych obrazków. Moduł ten może czytać i pisać obrazy różnych formatów, rysować prymitywne kształty, jak linie i wielokąty. Imager pozwala na łączenie różnorakich obrazów na różne sposoby, w różnej skali. Obiekt modułu jest tworzony w sposób, jaki został pokazany w przykładach.

use Imager; $img=Imager->new(); $img->read(file=>'filename.png',type=>'png') or die $img->errstr(); # moduł pozwala również na tworzenie pustych obrazów o rozmiarze (0,0) $img=Imager->new(); # lub o zadanym rozmiarze $img=Imager->new(xsize=>400,ysize=>300,channels=>4);

W ostatnim przykładzie zostanie utowrzony czarny obraz. Żeby utworzyć obiekt kolorowy, wystarczy wywołać funkcję $color=i_color_new($r,$g,$b,$a), gdzie wszystkie parametry mogą przyjmować wartości od 0 do 255. $color może być następnie wykorzystany w funkcji, która takiego argumentu potrzebuje.

Przykład wykorzystania modułu.

use Imager; my $file=shift; my $format; my $img=Imager->new(); # program czyta obrazek z pliku, w przypadku niepowodzenia # jest zwracany błąd # funkcja read pochodzi z modułu Imager::Files $img->read(file=>$file) or die $img->errstr(); $file =~ s/\.[^.]*$//; # program tworzy mniejszą wersję obrazka przy pomocy funkcji, # która znajduje się w module Imager::Transformations my $img_small = $img->scale(scalefactor=>.3); # autodopasowanie pojedyńczych kanałów $img_small->filter(type=>'autolevels'); # progam próbuje zapisać nowy obraz w którymś z podanych formatów SAVE: for $format ( qw(png gif jpg tiff ppm)) { # sprawdź, czy podany format jest obsługiwany if ($Imager::formats{$format}) { $file .= "_low.$format"; print "Obrazek został zapisany jako: $file\n"; # funkcja write z modułu Imager::Files $img_small->write(file=>$file) or die $img_small->errstr; last SAVE; } }

Metody bazowe: zgłaszanie błędów

Do funkcji bazowych modułu Imager należy errstr. Metoda ta zwraca błąd w postaci wiadomości, w danym kontekście. Błąd może zostać zwrócony na dwa sposoby. W pierwszym przez obiekt, jeżeli metoda przez niego wywoływana nie wykona się poprawnie:

my $image = Imager->new; $image->read(file => 'somefile.gif') or die $image->errstr;

W drugim przez klasę, jeżeli błąd dotyczy klasy:

my @imgs = Imager->read_multi(file => 'somefile.gif') or die Imager->errstr;

Odczyt i zapis obrazu

Do wczytania obrazka z pliku służy metoda read(), wywoływana zazwyczaj z dwoma parametrami: pierwszym jest nazwa pliku z obrazkiem, drugim jest typ obrazka. Typ może zostać pominięty, jeżeli jest on określony przez rozszerzenie nazwy pliku, co zostało pokazane w przykładzie powyżej.

Metoda write() działa na takiej samej zasadzie, jak read. Może przyjmować dwa argumenty lub tylko jeden, jeżeli nazwa pliku sugeruje typ obrazka.

Zamiast nazwy pliku, obie funkcje mogą przyjmować jako parametr np. uchwyt do pliku fh:

$image->write(fh => \*STDOUT, type => 'gif')

Imager obsługuje takie typy plików jak: bmp, gif, jpeg, png, pnm, raw, rgb, tga i tiff.

Atrybuty obrazu

Rozmiar obrazu można pobrać przy pomocy funkcji getwidth() i getheight(). Funkcja getchannels() zwraca ilość kanałów w obrazku, natomiast funkcje getmask() i setmask() ustalają maskę, tzn., określają, które kanały mają zostać zmodyfikowane podczas operacji na obrazku.

Metody rysujące

Moduł Imager stwarza możliwości rysowania prostych kształtów na danym obrazku.

Metoda line() - jako argumenty przyjmuje punkt początkowy (x1,y1), punkt końcowy (x2,y2), kolor, który domyślnie jest ustawiony na black, oraz dwa parametry, które określają, czy kontury linii mają być wygładzone, oraz czy punkt końcowy mam być wyraźnie zaznaczony.

$img->line(color=>$green, x1=>10, x2=>100, y1=>20, y2=>50, aa=>1, endp=>1);

Metoda arc() - funkcja rysuje część okręgu, którego środek jest podany w punkcie (x,y) , o długości promienia r. Parametr d1 określa początkowy kąt rysowania kształtu, w stopniach, domyślnie jest to 0 stopni, a paramter d2 jest to kąt, któy określa wielkość wycinka tego okręgu.

$img->arc(color=>$red, r=20, x=>200, y=>100, d1=>10, d2=>20);

Metoda circle() - rysuje okrąg, którego środek wyznaczają parametry x i y, a długość promienia jest wyznaczona przez r.

$img->circle(color=>$green, r=50, x=>200, y=>100);

Parametr color, który określa kolor obramowania, można zamienić na parametr fill, jeżeli chce się uzyskać wypełnienie danym kolorem danego kształtu.

Dodatkowe informacje

Informacje na temat modułu Imager można znaleźć na stronie http://www.develop-help.com/imager/Imager.html oraz na stronie http://search.cpan.org/~tonyc/Imager-0.58/Imager.pm na której znajdują się również odnośniki do poszczególnych klas modułu i przykłady z ich użyciem.

Autor opracowania

A.Ł.

Uniwersytet Gdański - Instytut Matematyki - Zakład Informatyki - Strona domowa - Perl - Wyklady
[c] Piotr Arłukowicz, materiały z tej strony udostępnione są na licencji GNU.