[ Pobierz całość w formacie PDF ]
.Obs³uga formatów PDF i PostScriptNa liœcie formatów obs³ugiwanych przez Image::Magick miêdzy innymi znajduj¹ siêPDF i PostScript.Jeœli zainstalowany jest GhostScript, to za pomoc¹ Image::Ma-gick mo¿na odczytywaæ i zapisywaæ pliki w tych formatach oraz siêgaæ doposzczególnych stron.Poni¿szy kod scala dwa pliki PDF:my $magick = new Image::Magick( format => "pdf" );$stan = $magick->Read( "okladka.pdf", "biuletyn.pdf" );warn "Odczyt nie powiód³ siê: $stan" if $stan;$stan = $magick->Write( "pdf:scalony.pdf" );warn "Zapis nie powiód³ siê: $stan" if $stan;Nale¿y jednak mieæ na uwadze, ¿e Image::Magick jest narzêdziem do obróbkiobrazów rastrowych.Pos³uguj¹c siê GhostScriptem, mo¿na odczytaæ plik PDF lubPostScript, ale Image: :Magick podda go rasteryzacji, przekszta³caj¹c tekst ielementy wektorowe w obrazy rastrowe.Podobnie siê dzieje przy zapisywaniudanych w tych formatach - ka¿da strona zapisywana jest jako obraz, któregootoczk¹ jest format PDF lub PostScript.Dlatego, jeœli za pomoc¹ Image: :Magick spróbujemy otworzyæ du¿y plik PDF lubPostScript, bardzo du¿o czasu zajmie rasteryzacja ka¿dej ze stron.Rezultatemzapisania takiego pliku bêdzie utrata informacji w postaci tekstowej iwektorowej.Na ekranie zmiany mog¹ byæ niedostrzegalne, lecz w druku efektbêdzie o wiele gorszy.Plik wynikowy najczêœciej jest znacznie wiêkszy, atekstu nie mo¿na zaznaczaæ ani kopiowaæ, poniewa¿ zosta³ przekszta³cony wobraz.Przetwarzanie obrazówGdy trzeba utworzyæ nowy obraz, zazwyczaj powinno siê korzystaæ z modu³u GD.Jest mniejszy i efektywniejszy.Jednak Image::Magick daje mo¿liwoœæ stosowaniaefektów specjalnych, takich jak rozmycie, nie obs³ugiwanych przez GD.Przyjrzyjmy siê przyk³adowi 13.6, przedstawiaj¹cemu skrypt CGI, w którymwykorzystujemy w³aœciwoœci modu³u Image::Magick w celu utworzenia szarfytekstowej z cieniem, widocznej na rysunku 13.12.Przyk³ad 13.6.shadow_text.cgi#!/usr/bin/perl -wTuse strict;use CGI;use Image::Magick;use constant KATALOG_CZCIONEK => "/usr/local/httpd/fonts";my $q = new CGI;my $czcionka = $q->param( "czcionka" ) || 'cetus';my $rozmiar = $q->param( "rozmiar" ) || 40;my $tekst = $q->param( "tekst" ) || 'Hej!';my $kolor = $q->param( "kolor" ) || 'black';$czcionka =~ s/\W//g;$czcionka = 'cetus' unless -e KATALOG CZCIONEK."/$czcionka.ttf";my $obraz = new Image::Magick ( size => '500x100' );$obraz->Read( 'xc:white' ) ;$obraz->Annotate ( font => "\@@{[ KATALOG_CZCIONEK ] } /$czcionka.ttf ",pen => ' gray ' ,pointsize => $rozmiar,gravity => 'Center',text => $tekst ) ;$obraz->Blur ( 100 );$obraz->Roll ( "+5+5" );$obraz->Annotate( font => "\@@{[ KATALOG_CZCIONEK ] }/$czcionka.ttf",pen => $kolor,pointsize => $rozmiar,gravity => 'Center',text => $tekst ) ;binmode STDOUT;print $q->header( "image/jpeg" );$obraz->Write ( "jpeg:-" );Biblioteka FreeType, daj¹ca mo¿liwoœæ zastosowania w obrazie czcionek TrueType,nie zostaje u¿yta w skrypcie bezpoœrednio.TrueType to format plikówskalowal-nych czcionek, opracowany wspólnie przez Apple i Microsoft.Obs³ugiwany jest jako rodzimy zarówno w systemie MacOS, jak i Windows.Dziêkitemu, tworz¹c napisy, mo¿emy wybieraæ spoœród tysiêcy czcionek TrueTypeogólnodostêpnych w In-ternecie.Brak biblioteki FreeType uniemo¿liwiakorzystanie z czcionek TrueType przy u¿yciu modu³u Image::Magick.Bibliotekê têmo¿na uzyskaæ pod adresemhttp://www.freetype.org/.Zanim bêdziemy mogli u¿yæ powy¿szej aplikacji CGI, musimy zaopatrzyæ siê wczcionki TrueType i umieœciæ je w katalogu podanym w sta³ej KATOLOG_CZCIONEK.Chc¹c odszukaæ sk³adnice czcionek, najlepiej jest siê pos³u¿yæ serwisemwyszukiwawczym; do wyszukania mo¿na zadaæ na przyk³ad frazê „free AND TrueTypeAND fonts".Aby zaspokoiæ ewentualn¹ ciekawoœæ, informujemy, ¿e czcionka, którapos³u¿y³a do stworzenia efektu druku maszynowego, to Cetus i towarzyszymodu³owi GD::Text.Przeanalizujmy teraz kod.Odczytujemy cztery pola decyduj¹ce o postaci napisu:czcionka, rozmiar, tekst i kolor.Gdy wartoœci któregoœ z pól nie otrzymamy,odpowiedniej zmiennej nadajemy wartoœæ domyœln¹.Jak widaæ, nie mamy tu odpowiedniego interfejsu u¿ytkownika (tj.formularza),poprzez który u¿ytkownik przekaza³by informacje do aplikacji.Nasza aplikacjaprzewidziana jest do u¿ycia ³¹cznie ze znacznikiem , na przyk³ad wnastêpuj¹cy sposób:Powy¿sze informacje u³o¿yliœmy w s³upku, aby by³o widaæ, które polaprzekazywane s¹ do aplikacji.W normalnej sytuacji ca³y ³añcuch zapytaniazapisalibyœmy w jednym wierszu.Poniewa¿ aplikacja tworzy obraz JPEG nabie¿¹co, mo¿emy jej u¿yæ do osadzania dynamicznych szarf tekstowych w sk¹din¹dstatycznych dokumentach HTML.Opieraj¹c siê na nazwie podanej czcionki, odszukujemy plik czcionki w kataloguKATALOG_CZCIONEK.Dla bezpieczeñstwa, przed przekazaniem pe³nej œcie¿ki doImageMagick, pozbywamy siê znaków niealfanumerycznych i u¿ywaj¹c operatora -esprawdzamy, czy czcionka o danej nazwie istnieje w katalogu KATALOG_C z c lONEK.W tym momencie jesteœmy ju¿ przygotowani do utworzenia obrazu.Najpierwtworzymy nowy egzemplarz obiektu Image::Magick, przekazuj¹c do niego rozmiarobrazu, wynosz¹cy 500 x 100 pikseli.Nastêpnie za pomoc¹ metody Read tworzymyobszar roboczy z bia³ym t³em.Jesteœmy gotowi do narysowania na obrazie szarfytekstowej.Gdy spojrzymy na rysunek 13.12, dostrze¿emy, ¿e napis ma cieñ.Konstruuj¹c obraz, najpierw rysujemy cieñ, a dopiero na nim ciemny napis.Do narysowania cienia u¿ywamy metody Annotate z kilkoma argumentami.Œcie¿ka dopliku czcionki wymaga przedrostka @.Jednak Perl nie pozwala na stosowanie wcudzys³owie podwójnym znaków @ w sposób bezpoœredni, wiêc musimy znak tenzamaskowaæ ukoœnikiem odwróconym („\").Gdy cieñ zostanie narysowany, przychodzi czas na zastosowanie efektu rozmycia,za pomoc¹ metody Biur.Dziêki temu na koniec uzyskamy efekt tekstu unosz¹cegosiê nad warstw¹ cienia.Metoda Biur wymaga podania wartoœci procentowej, aponiewa¿ zale¿y nam na pe³nym rozmyciu, podajemy liczbê 100.Wartoœæ wiêkszaod 100% daje niepo¿¹dany, ledwo widoczny efekt.Nastêpnym krokiem jest niewielkie przesuniecie cienia w poziomie i w pionie.Wtym celu wywo³ujemy metodê Roli i przekazujemy do niej wartoœæ „+5+5",oznaczaj¹c¹ przemieszczenie o 5 pikseli w prawo i 5 pikseli w dó³.Teraz mo¿emyju¿ narysowaæ w³aœciwy, nie rozmyty napis.W tym celu znów wywo³ujemy metodêAn-notate, lecz tym razem zmieniamy kolor napisu (peri) na wybrany przezu¿ytkownika.Rysunek jest gotowy i mo¿emy go wys³aæ do przegl¹darki.Na koniec w³¹czamy tryb binarny (binmode), w nag³Ã³wku wysy³amy typ treœciimage/jpeg i wywo³ujemy metodê Write, aby obraz JPEG skierowaæ dostandardowego strumienia wyjœciowego.Rozdzia³ 14 Middleware oraz XMLOprogramowuj¹c interfejs CGI mo¿na tworzyæ pojedyncze aplikacje Web: odprostych ksi¹¿ek goœci po z³o¿one programy, takie jak terminarze z mo¿liwoœci¹konstruowania harmonogramów du¿ych grup
[ Pobierz całość w formacie PDF ]