|
imagefilledarc
Draw a partial ellipse and fill it
(PHP 4 >= 4.0.6, PHP 5)
Example 1008. Creating a 3D looking pie<?php The above example will output something similar to: Related Examples ( Source code ) » imagefilledarc Examples ( Source code ) » Draw Filled Arc Examples ( Source code ) » Draw pie chart Code Examples / Notes » imagefilledarcbyron
try this, <? $Randomized = rand(1,20); for($i=0;$i<=$Randomized;$i++){$data[$i]=rand(2,20);};//full array with garbage. $imgx='200';$imgy='200';//Set Image Size. ImageX,ImageY $cx = '100';$cy ='50'; //Set Pie Postition. CenterX,CenterY $sx = '200';$sy='100';$sz ='20';// Set Size-dimensions. SizeX,SizeY,SizeZ $data_sum = array_sum($data); //convert to angles. for($i=0;$i<=$Randomized;$i++){ $angle[$i] = (($data[$i] / $data_sum) * 360); $angle_sum[$i] = array_sum($angle); }; $im = imagecreate ($imgx,$imgy); $background = imagecolorallocate($im, 255, 255, 255); //Random colors. for($i=0;$i<=$Randomized;$i++){ $r=rand(100,255);$g=rand(100,255);$b=rand(100,255); $colors[$i] = imagecolorallocate($im,$r,$g,$b); $colord[$i] = imagecolorallocate($im,($r/2),($g/2),($b/2)); } //3D effect. for($i=0;$z<=$sz;$z++){ for($i=0;$i<=$Randomized;$i++){ imagefilledarc($im,$cx,($cy+$sz)-$z,$sx,$sy,$angle_sum[$i-1] ,$angle_sum[$i],$colord[$i],IMG_ARC_PIE); }; }; //Top pie. for($i=0;$i<=$Randomized;$i++){ imagefilledarc($im,$cx,$cy,$sx,$sy,$angle_sum[$i-1] ,$angle_sum[$i], $colors[$i], IMG_ARC_PIE); }; //Output. header('Content-type: image/png'); imagepng($im); imagedestroy($im); ?> imazir
The previous example does not work. Try those modifications and you will have the expected results : <? $Randomized = rand(1,20); for($i=0;$i<=$Randomized;$i++){$data[$i]=rand(2,20);};//full array with garbage. $imgx='200';$imgy='200';//Set Image Size. ImageX,ImageY $cx = '100';$cy ='50'; //Set Pie Postition. CenterX,CenterY $sx = '200';$sy='100';$sz ='20';// Set Size-dimensions. SizeX,SizeY,SizeZ $data_sum = array_sum($data); //convert to angles. for($i=0;$i<=$Randomized;$i++){ $angle[$i] = (($data[$i] / $data_sum) * 360); $angle_sum[$i] = array_sum($angle); }; $im = imagecreate ($imgx,$imgy); $background = imagecolorallocate($im, 255, 255, 255); //Random colors. for($i=0;$i<=$Randomized;$i++){ $r=rand(100,255);$g=rand(100,255);$b=rand(100,255); $colors[$i] = imagecolorallocate($im,$r,$g,$b); $colord[$i] = imagecolorallocate($im,($r/2),($g/2),($b/2)); } //3D effect. for($z=1;$z<=$sz;$z++){ for($i=1;$i<=$Randomized;$i++){ imagefilledarc($im,$cx,($cy+$sz)-$z,$sx,$sy,$angle_sum[$i-1] ,$angle_sum[$i],$colord[$i],IMG_ARC_PIE); }; }; //Top pie. for($i=1;$i<=$Randomized;$i++){ imagefilledarc($im,$cx,$cy,$sx,$sy,$angle_sum[$i-1] ,$angle_sum[$i], $colors[$i], IMG_ARC_PIE); }; //Output. header('Content-type: image/png'); imagepng($im); imagedestroy($im); ?> mike
The previous example does not work well. This is much better and faster: <?php $Randomized = rand(1,20); for($i=0;$i<=$Randomized;$i++){$data[$i]=rand(2,20);};//full array with garbage. $imgx='600';$imgy='400';//Set Image Size. ImageX,ImageY $cx = '300';$cy ='150'; //Set Pie Postition. CenterX,CenterY $sx = '600';$sy='300';$sz ='100';// Set Size-dimensions. SizeX,SizeY,SizeZ $data_sum = array_sum($data); //convert to angles. for($i=0;$i<=$Randomized;$i++){ $angle[$i] = (($data[$i] / $data_sum) * 360); $angle_sum[$i] = array_sum($angle); }; $im = imagecreate ($imgx,$imgy); $background = imagecolorallocate($im, 255, 255, 255); //Random colors. for($i=0;$i<=$Randomized;$i++){ $r=rand(100,255);$g=rand(100,255);$b=rand(100,255); $colors[$i] = imagecolorallocate($im,$r,$g,$b); $colord[$i] = imagecolorallocate($im,($r/1.5),($g/1.5),($b/1.5)); } //3D effect. for($z=1;$z<=$sz;$z++){ // first slice imagefilledarc($im,$cx,($cy+$sz)-$z,$sx,$sy,0 ,$angle_sum[0],$colord[0],IMG_ARC_EDGED); for($i=1;$i<=$Randomized;$i++){ imagefilledarc($im,$cx,($cy+$sz)-$z,$sx,$sy,$angle_sum[$i-1] ,$angle_sum[$i],$colord[$i],IMG_ARC_NOFILL); }; }; //Top pie. // first slice imagefilledarc($im,$cx,$cy,$sx,$sy,0 ,$angle_sum[0], $colors[0], IMG_ARC_PIE); for($i=1;$i<=$Randomized;$i++){ imagefilledarc($im,$cx,$cy,$sx,$sy,$angle_sum[$i-1] ,$angle_sum[$i], $colors[$i], IMG_ARC_PIE); }; //Output. header('Content-type: image/png'); imagepng($im); imagedestroy($im); ?> poopie
The examples given so far for drawing a 3D looking pie chart are extremely inefficient and can give a huge performance hit to scripts that draw a lot of pies and in particular those that do offline processing on disk, rather than send a single pie chart to the browser (either way this modification saves you a lot of CPU cycles). Modify the portion of the code that creates the 3D effect to only draw the outline (with IMG_ARC_NOFILL) of the pie layers below the top filled pie: // make the 3D effect (modified for the original example) for ($i = 60; $i >= 50; $i--) { imagefilledarc($image, 50, $i, 100, 50, 0, 45, $darknavy, IMG_ARC_NOFILL); imagefilledarc($image, 50, $i, 100, 50, 45, 75 , $darkgray, IMG_ARC_NOFILL); imagefilledarc($image, 50, $i, 100, 50, 75, 360 , $darkred, IMG_ARC_NOFILL); } Note the >= on the for loop, which fills in a gap that is created without the = jphb
Note that whereas imagefilledarc() measures angles from 3 o'clock clockwise, imagettftext() measures angles from 3 o'clock anticlockwise so if you're, for example, trying to annotate a pie chart it can get a bit confusing. t_therkelsen
Note that imageFilledArc() and imageArc() both take ints as degree measurements. This is no problem if you're *only* using imageArc() and/or imageFilledArc(). However, if you're using calculated degrees and plan to superimpose other drawing elements (eg., you want to make vertical lines between the shadow 3D effect) you need to floor() your degrees before converting them to radians, otherwise you'll get precision errors. A small example illustrating the 'feature'... <?php $img = imageCreate(400, 400); $back = imageColorAllocate($img, 0, 0, 0); $front = imageColorAllocate($img, 255, 255, 255); $sd = 45.5; $ed = 130.5; imageFilledArc($img, 200, 200, 300, 300, $sd, $ed, $front, IMG_ARC_PIE|IMG_ARC_NOFILL|IMG_ARC_EDGED); imageArc($img, 200, 230, 300, 300, $sd, $ed, $front); imageLine($img, cos(deg2rad($sd))*150+200, sin(deg2rad($sd))*150+200, cos(deg2rad($sd))*150+200, sin(deg2rad($sd))*150+230, $front); imageLine($img, cos(deg2rad($ed))*150+200, sin(deg2rad($ed))*150+200, cos(deg2rad($ed))*150+200, sin(deg2rad($ed))*150+230, $front); header('Content-type: image/png'); imagepng($img); imagedestroy($img); ?> And this is how it should be... <?php $img = imageCreate(400, 400); $back = imageColorAllocate($img, 0, 0, 0); $front = imageColorAllocate($img, 255, 255, 255); $sd = floor(45.5); $ed = floor(130.5); imageFilledArc($img, 200, 200, 300, 300, $sd, $ed, $front, IMG_ARC_PIE|IMG_ARC_NOFILL|IMG_ARC_EDGED); imageArc($img, 200, 230, 300, 300, $sd, $ed, $front); imageLine($img, cos(deg2rad($sd))*150+200, sin(deg2rad($sd))*150+200, cos(deg2rad($sd))*150+200, sin(deg2rad($sd))*150+230, $front); imageLine($img, cos(deg2rad($ed))*150+200, sin(deg2rad($ed))*150+200, cos(deg2rad($ed))*150+200, sin(deg2rad($ed))*150+230, $front); header('Content-type: image/png'); imagepng($img); imagedestroy($img); ?> caist - www.caist.com
if you want to place a text onto the edge of a circle you need to get a point on the circle: $pos_x=$radius*sin(deg2rad($angle)); $pos_y=sqrt($radius*$radius-$pos_x*$pos_x); if you want the point to be in the middle of a pie piece you need a starting and ending angle $pos_x=$radius*sin(deg2rad($angle_end-($angle_start)/2)); $pos_y=sqrt($radius*$radius-$pos_x*$pos_x); hope it helps hans
I modificed the code to make a 3d pie from data collected elsewhere.... in this case it was for a statistics page... when testing you can use: enjoy <?php //Making a image 200 x 200 $im = imagecreate (200, 200); //Setting background color $background = imagecolorallocate($im, 226, 226, 226); //Setting colors of elements $randcolor[0] = imagecolorallocate($im, 255, 203, 3); $randcolor[1] = imagecolorallocate($im, 220, 101, 29); $randcolor[2] = imagecolorallocate($im, 189, 24, 51); $randcolor[3] = imagecolorallocate($im, 214, 0, 127); $randcolor[4] = imagecolorallocate($im, 98, 1, 96); $randcolor[5] = imagecolorallocate($im, 0, 62, 136); $randcolor[6] = imagecolorallocate($im, 0, 102, 179); $randcolor[7] = imagecolorallocate($im, 0, 145, 195); $randcolor[8] = imagecolorallocate($im, 0, 115, 106); $randcolor[9] = imagecolorallocate($im, 178, 210, 52); $randcolor[10] = imagecolorallocate($im, 137, 91, 74); $randcolor[11] = imagecolorallocate($im, 82, 56, 47); //Setting the darker alt color to the main color $darkcolor[0] = imagecolorallocate($im, 205, 153, 0); $darkcolor[1] = imagecolorallocate($im, 170, 51, 0); $drakcolor[2] = imagecolorallocate($im, 139, 0, 1); $darkcolor[3] = imagecolorallocate($im, 164, 0, 77); $darkcolor[4] = imagecolorallocate($im, 48, 0, 46); $darkcolor[5] = imagecolorallocate($im, 0, 12, 86); $darkcolor[6] = imagecolorallocate($im, 0, 52, 129); $darkcolor[7] = imagecolorallocate($im, 0, 95, 145); $darkcolor[8] = imagecolorallocate($im, 0, 65, 56); $darkcolor[9] = imagecolorallocate($im, 128, 160, 2); $darkcolor[10] = imagecolorallocate($im, 87, 41, 24); $darkcolor[11] = imagecolorallocate($im, 32, 6, 0); //Getting the data from GET $i = 0; while ($i <= 11) { $data[$i] = $_GET[++$i]; } //Getting ready $datasum = array_sum($data); $anglesum[0] = 0; $angle[0] = 0; $i = 0; //Calc the start and end angle position of the elements while ($i <= 11) { ++$i; $n = $i - 1; $part[$i] = $data[$n] / $datasum; $angle[$i] = floor($part[$i] * 360); $anglesum[$i] = array_sum($angle); } /* //DEBUGGING - only for testing purposes echo "<pre>"; print_r($part); print_r($anglesum); print_r($angle); */ // make the 3D effect $n = 0;$i=0; while ($n <= 11) { ++$n; $f = $n - 1; if ($angle[$n] != 0) { for ($i = 110; $i > 100; $i--) { imagefilledarc($im, 100, $i, 200, 100, $anglesum[$f], $anglesum[$n], $darkcolor[$f], IMG_ARC_PIE); } } } //make the 2d data that sits above the 3deffect $i = 0; while ($i <= 11) { ++$i; $n = $i - 1; if ($angle[$i] != 0) { imagefilledarc($im, 100, 100, 200, 100, $anglesum[$n], $anglesum[$i], $randcolor[$n], IMG_ARC_PIE); } } // flush image header('Content-type: image/png'); imagepng($im); imagedestroy($im); ?> paulcharltonthomson
Here's a slightly better way to get the colours for the pie chart shaded wall as posted by double-zonk at wp dot pl <?php $rgb0 = array (255, 153, 204); $rgb1 = array (255, 153, 0); $rgb2 = array (153, 204, 0); $rgb3 = array (51, 153, 102); $rgb4 = array (51, 204, 204); $rgb5 = array (51, 102, 255); $rgb6 = array (128, 0, 128); $rgb7 = array (150, 150, 150); for ($r = 0; $r < 8; ++$r) { if(${"rgb" . $r}[0] < 50) $shadowr = 0; else $shadowr = ${"rgb" . $r}[0] - 50; if(${"rgb" . $r}[1] < 50) $shadowg = 0; else $shadowg = ${"rgb" . $r}[1] - 50; if(${"rgb" . $r}[2] < 50) $shadowb = 0; else $shadowb = ${"rgb" . $r}[2] - 50; ${"wall" . $r} = array ($shadowr, $shadowg, $shadowb); } for ($s = 0; $s < 8; ++$s) { $kolor[$s] = imagecolorallocate($image, ${"rgb" . $s}[0], ${"rgb" . $s}[1], ${"rgb" . $s}[2]); $cien[$s] = imagecolorallocate($image, ${"wall" . $s}[0], ${"wall" . $s}[1], ${"wall" . $s}[2]); } ?> braulio
He añadido un par de cosillas al ejemplo de "hans at lintoo dot dk", sobre todo el grosor (thickness) del efecto 3D... <?php //Making a image 200 x 200 $im = imagecreate (200, 200); //Setting background color $background = imagecolorallocate($im, 226, 226, 226); //Setting colors of elements $randcolor[0] = imagecolorallocate($im, 255, 203, 3); $randcolor[1] = imagecolorallocate($im, 220, 101, 29); $randcolor[2] = imagecolorallocate($im, 189, 24, 51); $randcolor[3] = imagecolorallocate($im, 214, 0, 127); $randcolor[4] = imagecolorallocate($im, 98, 1, 96); $randcolor[5] = imagecolorallocate($im, 0, 62, 136); $randcolor[6] = imagecolorallocate($im, 0, 102, 179); $randcolor[7] = imagecolorallocate($im, 0, 145, 195); $randcolor[8] = imagecolorallocate($im, 0, 115, 106); $randcolor[9] = imagecolorallocate($im, 178, 210, 52); $randcolor[10] = imagecolorallocate($im, 137, 91, 74); $randcolor[11] = imagecolorallocate($im, 82, 56, 47); //Setting the darker alt color to the main color $darkcolor[0] = imagecolorallocate($im, 205, 153, 0); $darkcolor[1] = imagecolorallocate($im, 170, 51, 0); $drakcolor[2] = imagecolorallocate($im, 139, 0, 1); $darkcolor[3] = imagecolorallocate($im, 164, 0, 77); $darkcolor[4] = imagecolorallocate($im, 48, 0, 46); $darkcolor[5] = imagecolorallocate($im, 0, 12, 86); $darkcolor[6] = imagecolorallocate($im, 0, 52, 129); $darkcolor[7] = imagecolorallocate($im, 0, 95, 145); $darkcolor[8] = imagecolorallocate($im, 0, 65, 56); $darkcolor[9] = imagecolorallocate($im, 128, 160, 2); $darkcolor[10] = imagecolorallocate($im, 87, 41, 24); $darkcolor[11] = imagecolorallocate($im, 32, 6, 0); //Getting the data from GET /* $i = 0; while ($i <= 11) { $data[$i] = $_GET[++$i]; } */ $data = array( 100, 200, 50, 40); /* datos a mostrar ( menos de 12 valores ) */ $num_data = count ($data); //Getting ready $datasum = array_sum($data); $anglesum[0] = 0; $angle[0] = 0; $i = 0; //Se calcula el comienzo y final de la posición de los ángulos de los elementos while ($i < $num_data) { ++$i; $n = $i - 1; $part[$i] = $data[$n] / $datasum; $angle[$i] = floor($part[$i] * 360); $anglesum[$i] = array_sum($angle); } /* //DEBUGGING - only for testing purposes echo "<pre>"; print_r($part); print_r($anglesum); print_r($angle); */ // Variables posicion $cx = 120; $cy = 100; $ancho = 100; $largo = 2 * $ancho; // relación de aspecto $grosor = 25; // efecto 3D // make the 3D effect for ($g = $grosor; $g > 0; $g--) { $n = 0; while ($n < $num_data) { ++$n; $f = $n - 1; if ($angle[$n] != 0) imagefilledarc($im, $cx, $cy + $g, $largo, $ancho, $anglesum[$f], $anglesum[$n], $darkcolor[$f], IMG_ARC_PIE); } } //make the 2d data that sits above the 3deffect $i = 0; while ($i < $num_data) { ++$i; $n = $i - 1; if ($angle[$i] != 0) { imagefilledarc($im, $cx, $cy, $largo, $ancho, $anglesum[$n], $anglesum[$i], $randcolor[$n], IMG_ARC_PIE); } } // flush image header('Content-type: image/png'); imagepng($im); imagedestroy($im); ?> micha _a.t_ psytrance _d.o.t_ info
for nice colors and adapted shadows from amount of values i try: <?php function _errechne_gradzahlen( $werte ) { /* calc degrees */ foreach( $werte as $wert ) { $sum += $wert; } foreach( $werte as $wert ) { $gradzahlen[] = 360 * ( $wert / $sum ); } return $gradzahlen; } function _randomcol ( $im ) { return imagecolorallocate( $im, rand(100, 224), rand(100, 224), rand(128, 224) ); } $values = array( 100, 200, 50, 100, 43, 32 ); /* the data to display ( real values ) */ $werte = _errechne_gradzahlen( $values ); /* degrees-array */ $width = 200; $height = 200; $half_width = floor( $width / 2 ); $half_height = floor($height / 2); $im = ImageCreateTrueColor( $width, $height ); foreach( $werte as $key => $wert ) { /* get colors and shadows */ $color = _randomcol( $im ); $shadow = $color - 20000; // or brighter shadows take 10000 $colors[] = $color; $shadows[] = $shadow; /* 3D effekt */ for ($i = ($half_height + 10); $i > $half_height; $i--) { imagefilledarc( $im, $half_width, $i, $width, $half_height, $offset, ($offset + $wert), // from, to (degrees) $shadows[$key], IMG_ARC_NOFILL); } $offset = $offset + $wert; } $offset = 0; foreach( $werte as $key => $wert ) { /* an now draw the top */ imagefilledarc( $im, $half_width, $half_width, $width, $half_height, // half sized $offset, ($offset + $wert), $colors[$key], IMG_ARC_PIE); $offset = $offset + $wert; } header( "Content-type: image/png" ); imagepng ( $im ); imagedestroy( $im ); ?> sry for my crab english and the disordered code, i cut and 'translate' it from a class i wrote before. 04-jun-2005 08:25
For 3D-graphs you will want to have a nice shadow. Here is an easy wat to calculate a good matching shadow to a color. $color is the color for the pie-piece above, $shadow_color is the shadow under it. <?php $mask = 0; //0 for darker, 255 for brighter $percent = 0.70; //between 0.40 (very different) and 0.99 (almost the same) $R = rand(0, 124); // } between 0,124 if your background color is white $G = rand(0, 124); // } between 124,255 if your background color is black $B = rand(0, 124); // } or play with these values $RS = round($R * $percent) + round($mask * (1-$percent)); $GS = round($G * $percent) + round($mask * (1-$percent)); $BS = round($B * $percent) + round($mask * (1-$percent)); $color = imagecolorallocate( $im, $R, $G, $B); $shadow_color = imagecolorallocate( $im, $RS, $GS, $BS); ?> rich
Even more efficiency: The original code snippet and the following suggestions are inefficient in that they rely on the overlying php to fill vertically using loops rather than taking advantage of the underlying drawing routines. Also, this is done by repeatedly drawing filled partial elipses and circular calculations are typically expensive (PHP may use tables, I'm not sure) The original code could be rewritten as <?php // Add the bottom layer. imagefilledarc($image, 50, 60, 100, 50, 0, 45, $darknavy, IMG_ARC_PIE); imagefilledarc($image, 50, 60, 100, 50, 45, 75 , $darkgray, IMG_ARC_PIE); imagefilledarc($image, 50, 60, 100, 50, 75, 360 , $darkred, IMG_ARC_PIE); //Now do the joining pieces. //Note: Precompute cosines and sines for efficiency $c1=50*cos(45/180*M_PI); $s1=25*sin(45/180*M_PI); $c2=50*cos(75/180*M_PI); $s2=25*sin(75/180*M_PI); $area1=array(100,60,100,50,50+$c1,50+$s1,50+$c1,60+$s1); $area2=array(50+$c1,50+$s1,50+$c1,60+$s1,50+$c2,60+$s2,50+$c2,50+$s2); //Note that piece 3 goes round the corner. So we are only interested in the leftmost extent. You would need to do this programatically. Also, you do not need to make vertical parts for any segments completely at the back of the pie (in fact, not filledarcs either) $area3=array(50+$c2,50+$s2,50+$c2,60+$s2,0,60,0,50); imagefilledpolygon($image, $area1 , 4 , $darknavy); imagefilledpolygon($image, $area2 , 4 , $darkgray); imagefilledpolygon($image, $area3 , 4 , $darkred); imagefilledarc($image, 50, 50, 100, 50, 0, 45, $navy, IMG_ARC_PIE); imagefilledarc($image, 50, 50, 100, 50, 45, 75 , $gray, IMG_ARC_PIE); imagefilledarc($image, 50, 50, 100, 50, 75, 360 , $red, IMG_ARC_PIE); ?> Note that the polygons are perhaps slightly inefficient. If there was an imagefilledtriangle, this code would be simpler. Given how fundamental triangles are, perhaps for a future version? Rich jcoder
/* From a set of numbers from a query return and an array of colors this will generate a pie chart */ $a=array(); while($d=mysql_fetch_array($start_angle_query)) { $a[]=$d[0]; } $b=array(); $b =$a; /* make two arrays one for start of angle 2nd for end of angle */ $sum=array_sum($a); $degree_adjuster=360/$sum; //constant for circle array_unshift($a,0 ); // add 0 for start angle $start_angle=array(); // new array to hold values for start vector $end_angle=array(); //new array to hold values for end vector array_pop($a); //trim one array for start so numbers don't end on 360 while($a) //iterate till array is empty { array_push($start_angle,(end($start_angle)+ $a[0])); /*enter numbers in array $start_angle adding the last number in array and adding the first number from modified original array*/ array_shift($a);//delete first value of array } while($b) { array_push($end_angle,(end($end_angle)+$b[0])); array_shift($b); } for($i=0;$i<$angle_num_rows;$i++) { imagefilledarc($pie,130,149,260,260, ($start_angle[$i]*$degree_adjuster),$end_angle[$i]*$degree_adjuster, $colors[$i],IMG_ARC_FILL); } double-zonk
<? $width = 300; $height = 200; $dane[] = 1; $dane[] = 2; $dane[] = 3; $dane[] = 4; $dane[] = 5; $dane[] = 6; $dane[] = 7; $dane[] = 8; $dane[] = 9; $dane[] = 10; $dane[] = 11; // Kolory $image = imageCreate($width, $height); $background = imageColorAllocate($image, 205, 205, 205); $kolor[0] = imageColorAllocate($image, 255, 203, 3); $kolor[1] = imageColorAllocate($image, 220, 101, 29); $kolor[2] = imageColorAllocate($image, 189, 24, 51); $kolor[3] = imageColorAllocate($image, 214, 0, 127); $kolor[4] = imageColorAllocate($image, 98, 1, 96); $kolor[5] = imageColorAllocate($image, 0, 62, 136); $kolor[6] = imageColorAllocate($image, 0, 102, 179); $kolor[7] = imageColorAllocate($image, 0, 145, 195); $kolor[8] = imageColorAllocate($image, 0, 115, 106); $kolor[9] = imageColorAllocate($image, 178, 210, 52); $kolor[10] = imageColorAllocate($image, 137, 91, 74); $kolor[11] = imageColorAllocate($image, 82, 56, 47); $cien[0] = imagecolorallocate($image, 205, 153, 0); $cien[1] = imagecolorallocate($image, 170, 51, 0); $cien[2] = imagecolorallocate($image, 139, 0, 1); $cien[3] = imagecolorallocate($image, 164, 0, 77); $cien[4] = imagecolorallocate($image, 48, 0, 46); $cien[5] = imagecolorallocate($image, 0, 12, 86); $cien[6] = imagecolorallocate($image, 0, 52, 129); $cien[7] = imagecolorallocate($image, 0, 95, 145); $cien[8] = imagecolorallocate($image, 0, 65, 56); $cien[9] = imagecolorallocate($image, 128, 160, 2); $cien[10] = imagecolorallocate($image, 87, 41, 24); $cien[11] = imagecolorallocate($image, 32, 6, 0); // Oblicznia $suma = array_sum($dane); $stopnie = 0; for($i = 0; $i < count($dane); $i++){ $start[$i]= $stopnie; $stop[$i] = $stopnie + round(($dane[$i] / $suma) * 360, 0); $stopnie = $stop[$i]; } $x = $width / 2; $size = $width / 10; $y = $height / 2 - $size / 2 - 1; // Wyswietlanie for($g = $size; $g > 0; $g--){ for($n = 0; $n < count($dane); $n++){ imagefilledarc($image, $x, $y+$g, $width, $height - $size, $start[$n], $stop[$n], $cien[$n], IMG_ARC_PIE); } } for($i = 0; $i < count($dane); $i++){ imagefilledarc($image, $x, $y, $width, $height - $size, $start[$i], $stop[$i], $kolor[$i], IMG_ARC_PIE); } header("Content-type: image/png"); imagePNG($image); imageDestroy($image); ?> |
Change Languagegd_info getimagesize image_type_to_extension image_type_to_mime_type image2wbmp imagealphablending imageantialias imagearc imagechar imagecharup imagecolorallocate imagecolorallocatealpha imagecolorat imagecolorclosest imagecolorclosestalpha imagecolorclosesthwb imagecolordeallocate imagecolorexact imagecolorexactalpha imagecolormatch imagecolorresolve imagecolorresolvealpha imagecolorset imagecolorsforindex imagecolorstotal imagecolortransparent imageconvolution imagecopy imagecopymerge imagecopymergegray imagecopyresampled imagecopyresized imagecreate imagecreatefromgd2 imagecreatefromgd2part imagecreatefromgd imagecreatefromgif imagecreatefromjpeg imagecreatefrompng imagecreatefromstring imagecreatefromwbmp imagecreatefromxbm imagecreatefromxpm imagecreatetruecolor imagedashedline imagedestroy imageellipse imagefill imagefilledarc imagefilledellipse imagefilledpolygon imagefilledrectangle imagefilltoborder imagefilter imagefontheight imagefontwidth imageftbbox imagefttext imagegammacorrect imagegd2 imagegd imagegif imagegrabscreen imagegrabwindow imageinterlace imageistruecolor imagejpeg imagelayereffect imageline imageloadfont imagepalettecopy imagepng imagepolygon imagepsbbox imagepsencodefont imagepsextendfont imagepsfreefont imagepsloadfont imagepsslantfont imagepstext imagerectangle imagerotate imagesavealpha imagesetbrush imagesetpixel imagesetstyle imagesetthickness imagesettile imagestring imagestringup imagesx imagesy imagetruecolortopalette imagettfbbox imagettftext imagetypes imagewbmp imagexbm iptcembed iptcparse jpeg2wbmp png2wbmp |