Animowany gif z użyciem PHP i GD

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.

baner

Komentarze

  • Michał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)

Chcę dodać komentarz