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