Animowany gif z użyciem PHP i GD
GD jest biblioteką umożliwiającą pracę z grafiką z poziomu języka PHP. Posiada szereg możliwości począwszy od skalowania, kadrowania, filtrowania i skończywszy na zapisie w różnych formatach. A co z animacjami? Krucho. Po prostu nie zostały zaimplementowane. Ale głowa do góry jest proste rozwiązanie.
GIFEncoder
Brak obsługi animacji w bibliotece GD może okazać się czasami ograniczający. Naprzeciw z pomocą wychodzi dodatkowa klasa GIFEncoder. Specyfikacja formatu umożliwiła autorowi stworzenie programu łączącego wiele grafik (*.gif) w jeden animowany obrazek. Możemy zarówno wykorzystać pliki zapisane na dysku jak i te stworzone dynamicznie.
Klasę można pobrać z serwisu PHP Classes. Jako że rejestracja jest zniechęcająca oto i alternatywne źródło. Poniżej zamieszczam przykład użycia.
<?php
$frames = array();
$framed = array();
$colors = array(array(255,0,0),array(0,0,255));
foreach ($colors as $color)
{
ob_start();
$image = ImageCreate(50, 50); //width, height
$temp = ImageColorAllocate($image,$color[0] ,$color[1] ,$color[2]);
ImageFill($image,1,1,$temp);
imagegif($image);
imagedestroy($image);
$frames[] = ob_get_clean();
$framed[] = 100;//time
}
$gif = new GIFEncoder($frames,$framed,0,2,0, 0, 0,0,"bin");
Header('Content-type:image/gif');
echo $gif->GetAnimation();
Mój własny animowany baner
Wykorzystując opisaną klasę stworzyłem baner promujący moją stronę. Ważna była dla mnie estetyczna prosta szata graficzna. Nie ma fajerwerków. Jest to celowy zabieg. Nie chciałem dekoncentrować czytelników. Do tchnięcia życia w całość wystarczy skromna animacja. Na banerze umieszczam losowy wpis z bloga co ma odszukać potencjalnych zainteresowanych. Całość jest buforowania i aktualizuje się raz na 12 godzin.
Komentarze
Chcę dodać komentarzMichał26-04-2010
Jak tworzyć poszczególne klatki, gdzie je umieszczać w kodzie z tego posta? W tym „alternatywnym linku” jest kilka plików, którego trzeba użyć?
Marcin Baszczewski27-04-2010
Hej. Z danej witryny potrzebujesz tylko GIFEncoder.class.php. Sama animacja składa się z wielu obrazków. W przykładowym kodzie, który zamieściłem znajdują się dwa obrazki-tła o różnych kolorach. Zwróć uwagę na tablicę colors oraz uzupełnienie framed oznaczające jak długa dana klatka ma być wyświetlana. Jeśli nadal to wszystko wydaje Ci się zakręcone polecam tutorial dotyczący GD.
Michał03-05-2010
A co oznaczają te liczby (0,2,0,0,0,0) w poniższej linijce? GIFEncoder($frames,$framed,0,2,0, 0, 0,0,”bin”);
Marcin Baszczewski04-05-2010
Szczerze nie analizowałem wszystkich parametrów konstruktora. Nie potrafię Ci od tak odpowiedzieć na to pytanie. Odsyłam Cię do źródła a tutaj wklejam nazwy konkretnych parametrów: GIFEncoder($GIF_src, $GIF_dly, GIF_lop, $GIF_dis, $GIF_red, $GIF_grn, $GIF_blu, $GIF_ofs, $GIF_mod)