Ta strona wygląda tak kiepsko, ponieważ korzystasz z przeglądarki nie obsługującej ogólnie przyjętych standardów internetowych. Aby zobaczyą ją w pełnej krasie, zaktualizuj ją do wersji zgodnej z tymi standardami. Trwa to krótko i nie kosztuje nic.

Dynamiczne generowanie grafiki w PHP

Strona 1 2
Michał Paluchowski | opublikowany: 2002-01-22 | średnia ocena: 3.95/5

Ż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.

wydrukuj artykuł wyślij artykuł skomentuj i oceń artykuł wyślij komentarz tekst na jednej stronie
tych samych autorów
zobacz również

<?php

// Zaczynamy od nagłówka wskazującego typ zawartości, który
// będziemy prezentowali przeglądarce

header("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óg

ImageFilledRectangle($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 wycinek

ImageFilledArc($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świetlenia

ImageTTFText($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 przeskalowanie

ImageCopyResized($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 obrazka

ImageString($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.

oceń artykuł: Kiepski 1 2 3 4 5 Doskonały
Strona 1 2  
projekt i multimedia
programowanie
marketing
strategie prowadzenia
infrastruktura
praca