Web студия "GrandView"
  Главная   Написать Контакты
   
   
О проекте
Руководство php
 

imagefilledarc

(PHP 4 >= 4.0.6, PHP 5)

imagefilledarc -- Draw a partial ellipse and fill it

Описание

bool imagefilledarc ( resource image, int cx, int cy, int width, int height, int start, int end, int color, int style )

Draws a partial ellipse centered at the specified coordinate in the given image.

Список параметров

image

An image resource, returned by one of the image creation functions, such as imagecreatetruecolor().

cx

x-coordinate of the center

cy

y-coordinate of the center

width

The arc width

height

The arc height

start

The arc start angle, in degrees.

end

The arc end angle, in degrees. 0° is located at the three-o'clock position, and the arc is drawn clockwise.

color

A color identifier created with imagecolorallocate()

style

A bitwise OR of the following possibilities:

  1. IMG_ARC_PIE

  2. IMG_ARC_CHORD

  3. IMG_ARC_NOFILL

  4. IMG_ARC_EDGED

IMG_ARC_PIE and IMG_ARC_CHORD are mutually exclusive; IMG_ARC_CHORD just connects the starting and ending angles with a straight line, while IMG_ARC_PIE produces a rounded edge. IMG_ARC_NOFILL indicates that the arc or chord should be outlined, not filled. IMG_ARC_EDGED, used together with IMG_ARC_NOFILL, indicates that the beginning and ending angles should be connected to the center - this is a good way to outline (rather than fill) a 'pie slice'.

Возвращаемые значения

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.

Примеры

Пример 1. Creating a 3D looking pie

<?php

// create image
$image = imagecreatetruecolor(100, 100);

// allocate some solors
$white    = imagecolorallocate($image, 0xFF, 0xFF, 0xFF);
$gray     = imagecolorallocate($image, 0xC0, 0xC0, 0xC0);
$darkgray = imagecolorallocate($image, 0x90, 0x90, 0x90);
$navy     = imagecolorallocate($image, 0x00, 0x00, 0x80);
$darknavy = imagecolorallocate($image, 0x00, 0x00, 0x50);
$red      = imagecolorallocate($image, 0xFF, 0x00, 0x00);
$darkred  = imagecolorallocate($image, 0x90, 0x00, 0x00);

// make the 3D effect
for ($i = 60; $i > 50; $i--) {
  
imagefilledarc($image, 50, $i, 100, 50, 0, 45, $darknavy, IMG_ARC_PIE);
  
imagefilledarc($image, 50, $i, 100, 50, 45, 75 , $darkgray, IMG_ARC_PIE);
  
imagefilledarc($image, 50, $i, 100, 50, 75, 360 , $darkred, IMG_ARC_PIE);
}

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);


// flush image
header('Content-type: image/png');
imagepng($image);
imagedestroy($image);
?>

Результатом выполнения данного примера будет что-то подобное:

Примечания

Замечание: Эта функция нуждается в GD версии 2.0.1 или выше.



imagefilledellipse> <imagefill
Last updated: Sat, 27 Jan 2007
 
add a note add a note User Contributed Notes
imagefilledarc
Mike
14-Aug-2007 12:43
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);
?>
imazir at gmail dot com
31-Jan-2006 02:53
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);
?>
Byron at theworks dot net dot nz
10-Oct-2005 11:52
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);
?>
paulcharltonthomson at hotmail dot com
01-Jul-2005 11:00
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]);
    }

?>
04-Jun-2005 12: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);

?>
double-zonk at wp dot pl
08-Apr-2005 12:25
<?
$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);
?>
t_therkelsen at hotmail dot com
08-Mar-2005 01:21
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);
?>
braulio at example dot com
03-Mar-2005 08:54
He a
Новости
11 июля 2007
Сайт запущен
© 2007 info@grandviewstudio.com

Deprecated: Function set_magic_quotes_runtime() is deprecated in /home/sites/grandviewstudiocom/www/65f67d67a94ad980786580ae69e11c07/sape.php on line 324

Deprecated: Function set_magic_quotes_runtime() is deprecated in /home/sites/grandviewstudiocom/www/65f67d67a94ad980786580ae69e11c07/sape.php on line 330
Z058440144362 Z348613067571