jednoduchy skript na kresleni grafu na WWW
Petr Simek
psimek na jcu.cz
Pátek Listopad 7 08:12:24 CET 2003
On Fri, 7 Nov 2003, Petr Skoda wrote:
> Mam na webu kdesi ASCII soubory ktere obsahuji zapis grafu (spectra) v
> podobe
> x1 y1 \cr
> x2 y2 \cr
> ..
>
> popripadne nejakou hlavicku s komentari po ktere teprve zacinaji ty
> sloupce dat.
>
> Chci na jmeno souboru kliknout a vzapeti videt obrazek (GIF nebo JPG nebo
> PNG - proste neco co umi bezny libovolny web browser ihned zobrazit).
Ja jsem pro generovani GIFu v webovskem pocitadle pouzil cgi napsane v C
s pouzitim knihovny gd. myslim ze to by mohlo byt to prave i pro Vas.
> Ted by bylo jeste idealni (dalsi faze pozadavku - ale nemusi to byt jedna
> aplikace) aby se mi pri najeti na obrazek a kliknuti do 2 rohu provedlo
> zazoomovani vybrane oblasti (rizene serverem) popr by okolo mohly byt
> tlacitka ktera to zoomovani spusti
> (in i out)
Musel by jsteke kazdemu vygenerovanemu GIFu vygenerovat taky image.map
se spravnymi koordinaty, pak uz je to jen o predani parametru zpet pro
nove generovani uz jenom casti GIFu s vetsim rozlisenim.
> * Petr Skoda Tel : (323) 649201, l. 361 *
nize je priklad kodu jak se pracuje s gd ..
*------------------------------------------------------------------------*
| Petr Simek APS JU |
| psimek na jcu.cz |
*------------------------------------------------------------------------*
/* Spoctu velikost obrazku - velikost fontu + 2 pixely mezi fonty a 4 pixely okolo */
mesglen=strlen(MESG);
imgxsize=(mesglen * (fntxsize[fntype] + 2)) + (4 * 2);
imgysize=fntysize[fntype] + (4 * 2) + 1;
/* alokuju obrazky */
zaklad = gdImageCreate(imgxsize, imgysize);
final = gdImageCreate(zaklad->sx * magna, zaklad->sy * magna);
/* alokuju barvy */
IMG_BOX = gdImageColorAllocate(zaklad, BOX_R, BOX_G, BOX_B); /* podklad */
IMG_BKG = gdImageColorAllocate(zaklad, BKG_R, BKG_G, BKG_B);
IMG_FRG = gdImageColorAllocate(zaklad, FRG_R, FRG_G, FRG_B);
/* vyplnim pozadi pod pisma */
for(cnt = 0 ; cnt < mesglen; cnt++){
gdImageFilledRectangle(zaklad, 4 + (cnt * (fntxsize[fntype] + 2)),
4,
4 + (cnt * (fntxsize[fntype] + 2)) + fntxsize[fntype],
4 + fntysize[fntype],
IMG_BKG);
}
/* vypisu pismena */
for(cnt = 0 ; cnt < mesglen; cnt++){
gdImageChar(zaklad, fntptr[fntype],
4 + (cnt * (fntxsize[fntype] + 2)),
4, MESG[cnt], IMG_FRG);
}
/* zmenim velikost */
gdImageCopyResized(final, zaklad, 0, 0, 0, 0, final->sx, final->sy, zaklad->sx, zaklad->sy);
fprintf(stdout, "Content-type: img/gif\n\n");
gdImageGif(final, stdout);
gdImageDestroy(zaklad);
gdImageDestroy(final);
}
Další informace o konferenci Linux