Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: PHP: graafinen kuvaaja

Sivun loppuun

sooda [04.12.2003 19:06:23]

#

Graafinen kuvaaja. Kolme eri tapaa näyttää kuvaaja: viivakuvaaja+pystyviivat+täyttäjutska, pelkät viivat, ja palkkimoodi. Automaattinen skaalausjärjestelmä korkeuden perusteella((tm) :P). Ainakin kommentoitua on joten pitäisi ymmärtää edes jotenkin tota... koodi on tuolla: http://sooda.dy.fi/foo/graph.php

<?php
$staili=$_GET['staili']; //0=normaali(käyrä+pystyviivat), 1=pelkkä käyräviiva, 2=palkit
$dats=array(10,20,30,20,10,20,40,100,20,10);  //esimerkkitaulukko,
foreach($dats as $i) {
    if ($maksimuumi<$i) $maksimuumi=$i; //tarkistetaan maksimiarvo
}
$datat_yht=10;
header("Content-Type: image/png"); //tämä on kuva
$sz=15; //koko jutska, muuta niin tajuat
$mar=20; //reunuksen koko
$koko=400; //korkeus(ilman reunuksia)
if ($staili==2) $jutska=$sz; //jos staili on 2 niin tarvitsee yhden pystyrivin lisää
$lev=2*$mar +$sz*$datat_yht+$sz+$jutska; //leveys: marginaalit + graafialue + reunaa
$kork=2*$mar+$sz +$koko; //korkeus: marginaalit + reunusta ylös + korkeus
$kuva=imagecreate($lev,$kork);//uus kuva
$reuna=imagecolorallocate($kuva,100,100,100); //reunojen väri
$p=imagecolorallocate($kuva,0,0,0);//yleinen piirtoväri
$filli[0]=imagecolorallocate($kuva,153,153,153);//näitä kahta käytetään palkkien värjäämiseen
$filli[1]=imagecolorallocate($kuva,183,183,183);//...
$tausta=imagecolorallocate($kuva,255,255,255);//taustaväri
imagefilledrectangle($kuva,$mar,$mar,$lev-$mar,$kork-$mar,$tausta); //piirretään graafialue
$fillikolor=1; //värjäys juttu
$kerroin=$maksimuumi/$koko;//erikoislaskentaa
$x=$mar+$sz;
for($i=0;$i<$datat_yht;$i++){ //piirretään joka palkki
    $y=$dats[$i]/$kerroin; //yy sijainti
    $y=$kork-$y-$mar; //käännetään yy oikein päin ja pistetään se alkamaan pohjamarginaalin päältä
    if ($i==0){$lastx=$x;$lasty=$y;} //edellisen viivan sijainti tarkistus jutska ettei sekoa
    if ($dats[$i]==0) $dats[$i]="0"; //jos se on nolla niin se todellakin on nolla(mulla jos se oli nolla niin se ei ollut mitään...)
    if ($staili<2) { //ei palkkityyli
        imageline($kuva,$lastx,$lasty,$x,$y,$p); //käyräviiva
        imagestring($kuva,0,$x-2,$kork-$mar+1,$i,$p); //monesko jutska menossa ilmoitus
        imagestring($kuva,0,$x-2,$y-$sz,$dats[$i],$p); //käyrän päälle tarkka arvo
        if($staili==0) { //piirretään pystyviivat
            imageline($kuva,$x,$kork-$mar,$x,$y,$p); //pirrä se
            if (($i>0)and($y<$kork-$mar-1)) imagefill($kuva,$x-$sz/2,$kork-$mar-1,$filli[$fillikolor]); // ja täytetään palkkikset
        }
    }elseif ($staili==2) {//palkkityyli
        imageline($kuva,$x,$kork-$mar,$x,$y,$p); //palkin vasen pystyviiva
        imageline($kuva,$x+$sz,$kork-$mar,$x+$sz,$y,$p); //palkin oikea pystyviiva
        imageline($kuva,$x,$y,$x+$sz,$y,$p); //palkin yläviiva
        imagestring($kuva,0,$x+3,$kork-$mar+1,$i,$p); //monesko jutska menossa ilmoitus
        imagestring($kuva,0,$x+3,$y-$sz,$dats[$i],$p); //palkin yläpuolelle tarkka arvo
        if (($i>0)and($y<$kork-$mar-1)) imagefill($kuva,$x-$sz/2,$kork-$mar-1,$filli[$fillikolor]); //ja täytetään se
    }
    $lastx=$x; //viime koordinaatit
    $lasty=$y; //...
    $fillikolor=1-$fillikolor; //väriswappi
    $x+=$sz;//mennään eteenpäin
}
if (($staili==2)and($y<$kork-$mar-1)) imagefill($kuva,$x-$sz/2,$kork-$mar-1,$filli[$fillikolor]); //ja täytetään viimeisen kerran...

for($y=$kork-$mar;$y>$mar;$y-=$sz){ //havainnollistavat vaakaviivat
    imageline($kuva,$mar,$y,$lev-$mar,$y,$reuna); //viiva
    $luku=(int)(($kork-$y-$mar)*$kerroin); //lasketaan missä mennään...
    imagestring($kuva,0,$mar/2,$y-2,$luku,$p); //ja kerrotaan se
}
imagepng($kuva); //tehdään kuva...
imagedestroy($kuva); //ja vapautellaan palvelimen muistia
?>

Antti Laaksonen [05.12.2003 13:55:36]

#

Koodi on jotenkin ahtaan näköinen, mutta lopputulos on hieno.

sooda [05.12.2003 14:25:39]

#

kiitos :)

conami [05.12.2003 14:34:15]

#

Hyvä!!! Kerrankin jotain hyödyllistä ;)

Dustbin [05.12.2003 16:00:07]

#

Näyttäis paljon ilmavammalta, jos ottais kommentit pois :)

Heikki [05.12.2003 16:49:53]

#

Tyhjät rivit auttais kummasti...

Gwaur [06.12.2003 00:22:23]

#

no on tossa heikille tyhjä rivi ennen viimestä for-silmukkaa ;)

NiLon [08.12.2003 06:00:00]

#

Antti on kyllä oikeessa että ahdasta on :) Mutta silti hienoa jälkeä. Nuo poikkiviivat sekoittavat vähän palkistoa.

sooda [08.12.2003 14:09:17]

#

Noi kommentit on vaan siksi että siitä saisi selvää että mikä tekee mitäkin, nehän voi itse napata pois.

dera [30.01.2004 14:29:04]

#

Vähän sekanen mutta lopputulos on kyllä sen arvonen! toi on todella hieno!!

nlampola [04.02.2004 20:06:27]

#

Hieno!

Eikös tuossa olussa olevan kohdan:
$datat_yht=10;

Voisi muuttaa näin:
$datat_yht=count($dats);

Silloin ei tarvitse itse sitä muutella...

dera [16.02.2004 20:31:34]

#

Mutta mistä toi muutetaan palkkityyliksi?

sooda [17.02.2004 10:16:09]

#

laitat $staili:n 2:ksi. lue nyt sorsaa hyvä ihminen! löytyy tollainen: }elseif ($staili==2) {//palkkityyli

makeuu [17.08.2004 22:49:58]

#

onnistuiskohan tätä tekeen kahteen osaan.. ?

kayttaja-2791 [17.01.2005 23:46:41]

#

Tosi hyvä! Pienellä hiomisella sain tästä itselle kävijälaskuriini kuvaajan. Olin juuri alkamassa itse tekemään vastaavaa, mutta nyt sekin aika tuli säästettyä. Kiitokset tekijälle.

Puhveli [02.02.2005 16:07:18]

#

lainaus:

Ainakin kommentoitua on joten pitäisi ymmärtää edes jotenkin tota...

Tosiaan :D Pistä hei jatkossa useampia rivinvaihtoja niin se selkeyttää kansa.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta