Żeby nie ograniczać się do suchych formułek, przyjrzyjmy się przykładowi. Będziemy tworzyli obrazek zawierający tytuł artykułu, który będziemy podawali za każdym razem do skryptu.
tych samych autorów
- IMAP w stylu PHP [MP]
- Własne RSS [MP]
- Rodzina XSL [MP]
- Wprowadzenie do XML [MP]
- Rozszerzenia XSSI [MP]
zobacz również
<?php// Zaczynamy od nagłówka wskazującego typ zawartości, który
// będziemy prezentowali przeglądarceheader("Content-type: image/png");
// Tworzymy nowy obrazek
$obraz = ImageCreate(300, 50);
// WeĽmiemy 3 kolory: biały, czarny i czerwony
$kolor['1'] = ImageColorAllocate($obraz, 255, 255, 255);
$kolor['2'] = ImageColorAllocate($obraz, 0, 0, 0);
$kolor['3'] = ImageColorAllocate($obraz, 255, 0, 0);// Jako tło narysujemy na całej wielkości obrazka wypełniony
// prostokąt o białym tle, podane współrzędne to lewy górny i
// prawy dolny rógImageFilledRectangle($obraz, 0, 0, 300, 50, $kolor['1']);
// Teraz czerwone półkole dla dekoracji
// Pierwsze dwa parametry to współrzędne środka, dwa kolejne to
// szerokość i wysokość, kolejne dwa to początek i koniec półkola
// w stopniach, póĽniej kolor a na końcu styl, w tym przypadku
// standardowy, wypełniony wycinekImageFilledArc($obraz, 25, 25, 40, 40, 180, 360, $kolor['3'], 1);
// Teraz trochę tekstu, przyjmujemy że jest on podany w zmiennej
// $tekst. Pierwszy parametr określa wielkość w pikselach, drugi
// kąt tekstu (0 to normalny, poziomy tekst), dwa kolejne to
// współrzędne lewego, dolnego rogu pierwszego znaku, potem
// skierowanie do pliku z czcionką i na koniec tekst do
// wyświetleniaImageTTFText($obraz, 40, 0, 30, 5, $kolor['2'], "../times.ttf",
$tekst);// Zbieramy wszystko razem
ImagePNG($obraz);
// Zwalniamy zajętą pamięć
ImageDestroy($obraz);
?>
Nie należy zapomnieć o zwolnieniu pamięci na końcu, bo inaczej serwer może nie wytrzymać większej ilości odwołań.
Teraz wystarczy zapisać plik jako tytul.php i wywołać przez:
<img src="tytul.php?tekst=Tytul" width=300 height=50>
I mamy tytuł dla strony.
Edycja grafiki
W poprzednim skrypcie został od początku stworzony nowy obraz. Teraz weĽmiemy gotowy obraz w formacie PNG, zmienimy jego rozmiar i na dole dodamy tekst. Do zmiany rozmiarów wykorzystamy funkcję ImageCopyResized() a potrzebne do pracy wymiary obrazka uzyskamy dzięki funkcji GetImageSize(). Ta ostatnia tworzy czteroczęściową tablicę: szerokość, wysokość, typ obrazka i wyrażenie "height=Y width=X", gotowe do wstawienia np. do znacznika IMG.
Oto kod skryptu:
<?php// Przyjmijmy, że nazwa starego obrazka znajduje się w zmiennej
// $stary_plik$rozmiar = GetImageSize($stary_plik);
$stary = ImageCreateFromPNG($stary_plik);
// Zmniejszymy jego rozmiar o 1/3, zobaczmy ile to będzie
$nowa_szerokosc = round($rozmiar['0'] / 3 * 2);
$nowa_wysokosc = round($rozmiar['1'] / 3 * 2);// Otwieramy nowy obrazek i nadajemy mu czarne tło
$nowy = ImageCreate($nowa_szerokosc, $nowa_wysokosc);
$czarny = ImageColorAllocate($nowy, 0, 0, 0);
// Kopiujemy nowy obrazek
// Określamy kolejno cel, Ľródło, współrzędne lewego, górnego
// roku celu i Ľródła, oraz szerokość i wysokość celu i Ľródła
// Jeśli wymiary różnią się między Ľródłem a celem, dokonane
// będzie przeskalowanieImageCopyResized($nowy, $stary, 0, 0, 0, 0, $nowa_szerokosc,
$nowa_wysokosc, $rozmiar['0'], $rozmiar['1']);// Pozbywamy się starego obrazka
ImageDestroy($stary);
// Wstawiamy tekst
// Liczba dwa określa jedną z 5 wbudowanych czcionek, można też
// dodać własne funkcją ImageLoadFont(). Wstawiamy to w dolnym,
// lewym rogu obrazkaImageString($nowy, 2, 5, $nowa_wysokosc - 5, "Copyright 2002",
$czarny);// No to wyświetlamy
header("Content-type: image/png");
ImagePNG($nowy);
ImageDestroy($nowy);
?>
Tak właśnie wygląda dynamiczne tworzenie obrazków przy pomocy PHP. Oczywiście, żeby te obrazki były naprawdę dynamiczne trzeba odpowiednio zorganizować podawanie zmiennych przy ich tworzeniu, co pozwoli generować np. efektowne wykresy czy tytuły.