Grafiek maken met tekst erin, HELP!

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Martin Meijer

Martin Meijer

24/08/2007 13:47:00
Quote Anchor link
Beste leden,

Ik ben aan de hand van een Grafiek (3D) die hier gepost was een uitgebreidere te maken die met een database samenwerkt.

Het volgende script heb ik reeds:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
<?PHP
// Config includen voor database connectie!!
$dbh    = "localhost";
$dbu    = "xxx";
$ddb    = "xxx";
$dww    = "xxx";
mysql_connect("".$dbh."", "".$dbu."", "".$dww.""); // Mysql verbinding maken, zo niet een foutmelding
mysql_select_db("".$ddb.""); // Selecteren van de tabel in de database, is het fout komt er een melding

// Dagen deze maand

$days_tm    = date("t");
// Datum deze dag 01 t/m 31
$day_td        = date("d");

$i    = 1;
// Ophalen gegevens uit de database en verwerken in de grafiek
$sql_001    = mysql_query("SELECT gewicht,UNIX_TIMESTAMP(datum) AS datum FROM consult WHERE klid=15") or die(mysql_error());
while($test = mysql_fetch_assoc($sql_001))
{

    $gegevens[]        = $test['gewicht'];
    $datum[]        = date("d-m-y", $test['datum']);
    $legenda[]        = $i;
    $i++;
}


$kleuren         = "#FF0000"; // Dit was een array met div. kleurcodes, ik heb er 1 kleur van gemaakt waar de grafiek in gemaakt wordt
//$legenda         = array('Type A', 'Type B', 'Type C');

$img_hoogte     = 200; // Hoogte van het plaatje
$breedte         = 20; // Breedte van de kolom

// Berekend de breedte van het plaatje excl. de legenda breedte

function kolom_hoogte($deel, $max, $img_hoogte, $breedte)
{

    return ($deel/$max)*($img_hoogte-(0.5*$breedte));
}


// Voor het 3d effect (half cosinus 30)
function schuin_x($breedte)
{

    return $breedte*0.43;
}


// Voor het 3d effect (half sinus 30)
function schuin_y($breedte)
{

    return $breedte*0.25;
}


// Zet de HTML kleur om in een rbg waarde.
function hex2rbg($color, $image)
{

    $string = str_replace('//','',$color);
    return    imagecolorallocate($image, hexdec(substr($string,0,2)), hexdec(substr($string,2,2)), hexdec(substr($string,4,2)));
}


// Berekend het maximum aantal tekens per array waarde en geeft de lengte van de langste terug.
function maxarraylength($input)
{

    foreach($input as $v)
    {

        $output[] = strlen($v);
    }

    return max($output);
}


header("content-type: image/png");

// grootte van het plaatje basseren op het aantal kolomen:
$kolomen    = count($gegevens);
$width         = ($kolomen*$breedte*2)+(0.5*$breedte);
$image         = imagecreate($width+(maxarraylength($legenda)*7)+25, ($img_hoogte+1));

// Achtergrond:
$bg = imagecolorallocate($image, 255, 255, 255);

// KOLUMS
for($i=0;$i<$kolomen;$i++)
{

    // vars:
    $begin = ($i*$breedte)+($i*$breedte)+(0.5*$breedte);
    $hoogte = kolom_hoogte($gegevens[$i], max($gegevens), $img_hoogte, $breedte);
    $kleur = hex2rbg($kleuren, $image); // [$i] achter @kleuren weggehaald om de grafiek alle statuten dezelfde kleur te geven
    $black = imagecolorallocate($image, 0, 0, 0);
    
    // kolom:
    imagefilledrectangle($image, $begin, ($img_hoogte-$hoogte), ($begin+$breedte), $img_hoogte, $kleur); // Vlak
    imagerectangle($image, $begin, ($img_hoogte-$hoogte), ($begin+$breedte), $img_hoogte, $black); // Omlijning
    
    // Tekst toevoegen aan de Grafiek(Dit is nieuw in de grafiek!)

    $im                 = imagecreate(20, 110);
    $background_color     = imagecolorallocate($im, 255, 255, 255);
    $text_color         = imagecolorallocate($im, 233, 14, 91);
    //imagestring($im, 1, 5, 5,  "".$datum[$i]."", $text_color);
    //imagegif($im);
    




    // 3d effect:

    $punten = array(
        $begin,// X
        ($img_hoogte-$hoogte),// Y
      
        ($begin+schuin_x($breedte)),// X
        ($img_hoogte-$hoogte-schuin_y($breedte)),// Y
      
        ($begin+$breedte+schuin_x($breedte)),// X
        ($img_hoogte-$hoogte-schuin_y($breedte)),// Y
      
        ($begin+$breedte+schuin_x($breedte)),// X
        ($img_hoogte-schuin_y($breedte)),// Y
      
        ($begin+$breedte),// X
        $img_hoogte,// Y
      
        ($begin+$breedte),// X
        ($img_hoogte-$hoogte)// Y
    );
    imagefilledpolygon($image, $punten, 6, $kleur); // Vlak
    imagepolygon($image, $punten, 6, $black); // Omlijning
    imageline($image, $punten[10], $punten[11], $punten[4], $punten[5], $black); // Tussen lijn
    
    // Legenda:

    $top = (15*$i)+(15*$i)+(0.5*$breedte);
    $left = ($kolomen*$breedte)+($kolomen*$breedte)+(0.5*$breedte);
    imagefilledrectangle($image, $left, $top*0.5, $left+15, $top*0.5+10, $kleur); // Vlak
    imagecharup($im, 1, $top*0.5, $left+15, $datum[$i], $kleur);
    imagerectangle($image, $left, $top*0.5, $left+15, $top*0.5+10, $black); // Omlijning
    imagestring($image, 3, $left+20, $top*0.5, $legenda[$i], $black); // Text
}
// // KOLUMS

imagepng($image);
imagedestroy($image);
?>

De bedoeling is dat in de grafiek op http://www.aviestar-hosting.nl/ag.php in elke verticale balk de datum in komt te staan en eronder het gewicht.

Hoe kan ik dit regelen, ik heb al iets geprobeert als op regel: 128

Staat er nog in maar geeft geen effect, wie kan mij hierin even ondersteunen?

Alvast reuze bedankt!
Gewijzigd op 01/01/1970 01:00:00 door Martin Meijer
 
PHP hulp

PHP hulp

29/03/2024 15:24:27
 
Martin Meijer

Martin Meijer

24/08/2007 20:52:00
Quote Anchor link
Ik ben er al mee verder, zelf uitgevonden hier de update van het script even!

Sorry voor de post extra, ik weet dat het nog niet mag, maar ik ben verder met het script en wil het laten zien, als er op en/of aanmerkingen op zijn hoor ik dit graag.

Ik ben er nog niet helemaal mee klaar, maar wellicht dat iemand er hier nog wat aan heeft.

Met een beetje creativiteit kan je zorgen dat dit script met alle gegevens die je maar wilt die uit de database gehaald worden.

Toch bedankt voo rhet meedenken!

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
<?PHP
// Config includen voor database connectie!!
$dbh    = "localhost";
$dbu    = "xxx";
$ddb    = "xxx";
$dww    = "xxx";
mysql_connect("".$dbh."", "".$dbu."", "".$dww.""); // Mysql verbinding maken, zo niet een foutmelding
mysql_select_db("".$ddb.""); // Selecteren van de tabel in de database, is het fout komt er een melding

// Dagen deze maand

$days_tm    = date("t");
// Datum deze dag 01 t/m 31
$day_td        = date("d");

$j    = 1;
// Ophalen gegevens uit de database en verwerken in de grafiek
$sql_001    = mysql_query("SELECT gewicht,UNIX_TIMESTAMP(datum) AS datum FROM consult WHERE klid=15") or die(mysql_error());
while($test = mysql_fetch_assoc($sql_001))
{

    $gegevens[]        = $test['gewicht'];
    $datum[]        = date("d/m/Y", $test['datum']);
    $legenda[]        = date("d/m/Y", $test['datum']);
    $j++;
}


$kleuren         = "#FF0000"; // Dit was een array met div. kleurcodes, ik heb er 1 kleur van gemaakt waar de grafiek in gemaakt wordt
//$legenda         = array('Type A', 'Type B', 'Type C');

$img_hoogte     = 200; // Hoogte van het plaatje
$breedte         = 16; // Breedte van de kolom

// Berekend de breedte van het plaatje excl. de legenda breedte

function kolom_hoogte($deel, $max, $img_hoogte, $breedte)
{

    return ($deel/$max)*($img_hoogte-(0.5*$breedte));
}


// Voor het 3d effect (half cosinus 30)
function schuin_x($breedte)
{

    return $breedte*0.43;
}


// Voor het 3d effect (half sinus 30)
function schuin_y($breedte)
{

    return $breedte*0.25;
}


// Zet de HTML kleur om in een rbg waarde.
function hex2rbg($color, $image)
{

    $string = str_replace('//','',$color);
    return    imagecolorallocate($image, hexdec(substr($string,0,2)), hexdec(substr($string,2,2)), hexdec(substr($string,4,2)));
}


// Berekend het maximum aantal tekens per array waarde en geeft de lengte van de langste terug.
function maxarraylength($input)
{

    foreach($input as $v)
    {

        $output[] = strlen($v);
    }

    return max($output);
}


header("content-type: image/png");

// Grootte maken voor het plaatje
$kolomen    = count($gegevens);
$bg_width     = ($kolomen*$breedte*2)+(0.5*$breedte);
$bg_hight    = 400;

// grootte van het plaatje basseren op het aantal kolomen:
$kolomen    = count($gegevens);
$width         = ($kolomen*$breedte*2)+(0.5*$breedte);
$image         = imagecreate($width+(maxarraylength($legenda)*7)+25, ($img_hoogte+1));
// Maken van de achtergrond
$im            = imagecreate(600, 400);

// Echte achtergrond!
$backgr    = imagecolorallocate($im, 0, 0, 0);

// Achtergrond:
$bg = imagecolorallocate($image, 255, 255, 255);

// KOLUMS
for($i=0;$i<$kolomen;$i++)
{

    $s = $i+1;
    
    // vars:
    $begin = ($i*$breedte)+($i*$breedte)+(0.5*$breedte);
    $hoogte = kolom_hoogte($gegevens[$i], max($gegevens), $img_hoogte, $breedte);
    $kleur = hex2rbg($kleuren, $image); // [$i] achter @kleuren weggehaald om de grafiek alle statuten dezelfde kleur te geven
    $black = imagecolorallocate($image, 0, 0, 0);
    
    // kolom:
    $string2    = $datum[$i];
    
    //echo $datum[$i];
    //echo "".$begin."<br />";
    
    // Achtergrond maken met de aantal KG
    //imagefilledrectangle($image, $left, $top*0.5, $left+15, $top*0.5+10, $kleur); // Vlak

    
    $j    = $i+1;
      
    // Maken van de statuten zelf, voorkant met omleining
    imagefilledrectangle($image, $begin, ($img_hoogte-$hoogte), ($begin+$breedte), $img_hoogte, $kleur); // Vlak
    imagerectangle($image, $begin, ($img_hoogte-$hoogte), ($begin+$breedte), $img_hoogte, $black); // Omlijning
    imagestringup($image, 2, $begin+1, 198, "".$j.") ".$string2."", $black); // Datum in de balk, werkt niet goed toont alleen de eerste cijfer van de hele datum terijl het hoort te zijn als in de legenda staat aangegeven maar dan verticaal in de balk gezet
    
    // 3d effect:

    $punten = array(
        $begin,// X
        ($img_hoogte-$hoogte),// Y
      
        ($begin+schuin_x($breedte)),// X
        ($img_hoogte-$hoogte-schuin_y($breedte)),// Y
      
        ($begin+$breedte+schuin_x($breedte)),// X
        ($img_hoogte-$hoogte-schuin_y($breedte)),// Y
      
        ($begin+$breedte+schuin_x($breedte)),// X
        ($img_hoogte-schuin_y($breedte)),// Y
      
        ($begin+$breedte),// X
        $img_hoogte,// Y
      
        ($begin+$breedte),// X
        ($img_hoogte-$hoogte)// Y
    );
    
    // Maken van de 3D met omleining
    imagefilledpolygon($image, $punten, 6, $kleur); // Vlak
    imagepolygon($image, $punten, 6, $black); // Omlijning
    imageline($image, $punten[10], $punten[11], $punten[4], $punten[5], $black); // Tussen lijn
    
    // Legenda:

    $top = (15*$i)+(15*$i)+(0.5*$breedte);
    $left = ($kolomen*$breedte)+($kolomen*$breedte)+(0.5*$breedte);
    
    //$a = $left+5;
    //$b = $top*0.5;
    //echo "".$a."-".$b."";
    
    // Maken van de legenda!

    imagefilledrectangle($image, $left, $top*0.5, $left+15, $top*0.5+10, $kleur); // Vlak
    imagerectangle($image, $left, $top*0.5, $left+15, $top*0.5+10, $black); // Omlijning
    //imagestring($image, 3, $left+20, $top*0.5, $legenda[$i], $black); // Text

    imagestring($image, 3, $left+5, $top*0.5-1, $s, $black); // Text
    imagestring($image, 3, $left+20, $top*0.5, "".$gegevens[$i]." KG", $black); // Text
}

imagepng($image);
imagedestroy($image);
?>
 
- wes  -

- wes -

24/08/2007 21:19:00
Quote Anchor link
bump
foei
doei
 
Thom Lala

Thom Lala

27/08/2007 12:59:00
Quote Anchor link
die kleuren codes zijn heel raar, wnnr ik een #00ff3c erin zet, wordt het een hele andere kleur, hoe kan dat?
 
M Ypma

M Ypma

27/08/2007 13:15:00
Quote Anchor link
Quote:
Sorry voor de post extra, ik weet dat het nog niet mag, maar ik ben verder met het script en wil het laten zien, als er op en/of aanmerkingen op zijn hoor ik dit graag.

guess what!:D daar is de edit knop voor;)
 
Thom Lala

Thom Lala

27/08/2007 14:01:00
Quote Anchor link
hmm, dat is niet echt het antwoord wat ik zoek op mijn vraag
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.