phpTableGraph
Dawno temu napisałem w C++ program "TABLE GRAPH", który na podstawie bitmapowej grafiki tworzył kod tabeli w języku HTML, gotowy do wstawienia na stronę WWW.
Zastosowanie programu do tego celu stwarzało pewne ograniczenie, a mianowicie nie było możliwe dynamiczne generowanie takiej pseudo grafiki. Sprawę rozwiązuje mój prosty skrypt PHP, który na podstawie grafiki w formacie *.GIF, *.JPEG, *.PNG, *.WBMP, *.XPM, *.XBM generuje kod tabeli w języku HTML. Taka tabela ma następujące właściwości:
- ma wymiary takie same jak konwertowany obrazek,
- jej komórki mają 1 piksel szerokości i 1 piksel wysokości,
- nie posiada żadnego obramowania tak wewnętrznego jak i zewnętrznego,
- kolory tła odpowiednich komórek są identyczne z kolorami odpowiednich
pikseli w obrazku.
Poniżej zamieszczam przykład tak wykonanej pseudo grafiki.
Zalety tak wykonanej grafiki:
- utrudnione kopiowanie takiej grafiki,
- taka grafika jest wyświetlana nawet gdy użytkownik zablokuje
w przeglądarce WWW możliwość wyświetlania obrazków,
Wady takiej grafiki:
- znacznie większy rozmiar niż tradycyjnego obrazka, co powoduje
dłuższe ładowanie strony WWW,
- prawidłowe wyświetlanie takiej grafiki zależne od interpretacji jej
kodu HTML przez przeglądarkę,
- grafika musi składać się z tzw. kolorów bezpiecznych.
Grafikę tego typu prawidłowo wyświetlają przeglądarki:
- Internet Explorer 5.0 lub nowszy,
- Mozilla 0.9.5 lub nowsza,
- Opera 5 lub nowsza.
Jak widać tego typu rozwiązanie ma więcej wad niż zalet, ale jeśli mimo wszystko Cię interesuje, to poniżej wyjaśniam jak taką ciekawą tabelę stworzyć.
Abyśmy byli w stanie obrabiać grafikę za pomocą PHP, parser ten powinien być wyposażony w rozszerzenie GD, najlepiej w wersji 2.
<?php
##
## Diaboli phpTableGraph - www.diaboli.prv.pl
##
// Skanowanie obrazka
$image=imageCreateFromPng("test.png");
$szerokosc=ImageSX($image);
$wysokosc=ImageSY($image);
for($j=0;$j<$wysokosc;$j++)
{
for($i=0;$i<$szerokosc;$i++)
{
$color[$i][$j]=ImageColorsForIndex($image,
ImageColorAt($image,$i,$j));
$colorhex[$i][$j]='#'.base_convert($color[$i][$j]['red'], 10, 16)
.base_convert($color[$i][$j]['green'], 10, 16)
.base_convert($color[$i][$j]['blue'], 10, 16);
}
}
ImageDestroy($image);
// Generowanie tabeli HTML
print '<TABLE border=0 cellspacing=0 cellpadding=0><TBODY>';
for($j=0;$j<$wysokosc;$j++)
{
print '<TR>';
for($i=0;$i<$szerokosc;$i++)
{
print '<TD width="1" height="1" bgcolor="'.$colorhex[$i][$j].'">
</TD>';
}
print '</TR>';
}
print '</TBODY></TABLE>';
?>
|
Na powyższym listingu widać jak:
- Tworzony jest obiekt o nazwie "$image" na podstawie fizycznego obrazka "test.png". Wykorzystywana funkcja ImageCreateFromPng() tworzy taki obiekt na podstawie obrazka w formacie *.PNG. Inne funkcje tego typu dla obrazków w jakże ważnych formatach GIF, JPEG to: ImageCreateFromGif(), ImageCreateFromJPEG(). Pozostałymi formatami nie ma co sobie zawracać głowy.
- Badana jest szerokość i wysokość obrazka na podstawie obiektu "$image".
- Tworzona jest 2-wymiarowa tablica "$color" zawierająca kolor w formacie RGB każdego piksela z obrazka. Kolor każdego piksela z obrazka pobierany jest za pomocą funkcji ImageColorsFromIndex(), która jako argumenty przyjmuje identyfikator obiektu i indeks danego koloru pobieranego funkcją ImageColorAt().
- Tworzona jest 2-wymiarowa tablica "$colorhex" w której składowane są wartości kolorów poszczególnych pikseli w systemie szesnastkowym. Dzięki konwersji kolorów z RGB do szesnastkowego, wynikowy kod tabelki HTML jest mniejszy.
- Wskaźnik do obiektu "$image" jest uwalniany.
- Generowana jest tabela w języku HTML, której komórki mają tło zabarwione na odpowiedni kolor pobrany z tablicy "$colorhex".
I w ten oto sposób generowane są dynamicznie z poziomu PHP grafiki
w formacie... HTML :-)
|