ConFoo 2025

ImagickDraw::arc

(PECL imagick 2, PECL imagick 3)

ImagickDraw::arcDibuja un arco

Descripción

public ImagickDraw::arc(
    float $sx,
    float $sy,
    float $ex,
    float $ey,
    float $sd,
    float $ed
): bool
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Dibuja un arco que cae dentro de un rectángulo limitado en la imagen.

Parámetros

sx

Coordenada x del comienzo del rectángulo limitado

sy

Coordenada y del comienzo del rectángulo limitado

ex

Coordenada x del final del rectángulo limitado

ey

Coordenada y del final del rectángulo limitado

sd

comienzo de los grados de rotación

ed

final de los grados de rotación

Valores devueltos

No devuelve ningún valor.

Ejemplos

Ejemplo #1 Ejemplo de ImagickDraw::arc()

<?php
function arc($strokeColor, $fillColor, $backgroundColor, $startX, $startY, $endX, $endY, $startAngle, $endAngle) {

//Create a ImagickDraw object to draw into.
$draw = new \ImagickDraw();
$draw->setStrokeWidth(1);
$draw->setStrokeColor($strokeColor);
$draw->setFillColor($fillColor);
$draw->setStrokeWidth(2);

$draw->arc($startX, $startY, $endX, $endY, $startAngle, $endAngle);

//Create an image object which the draw commands can be rendered into
$image = new \Imagick();
$image->newImage(IMAGE_WIDTH, IMAGE_HEIGHT, $backgroundColor);
$image->setImageFormat("png");

//Render the draw commands in the ImagickDraw object
//into the image.
$image->drawImage($draw);

//Send the image to the browser
header("Content-Type: image/png");
echo
$image->getImageBlob();
}

?>

add a note

User Contributed Notes 1 note

up
1
skmanji at manji dot org
13 years ago
You can do a pie chart with a combination of arc and polygon functions (there really ought to be a built-in command for this)

<?php
// create a new canvas object and a white image
$canvas = new Imagick();
$canvas->newImage(600, 600, 'grey');

image_pie($canvas, 300, 300, 200, 0, 45, 'red');
image_pie($canvas, 300, 300, 200, 45, 125, 'green');
image_pie($canvas, 300, 300, 200, 125, 225, 'blue');
image_pie($canvas, 300, 300, 200, 225, 300, 'cyan');
image_pie($canvas, 300, 300, 200, 300, 360, 'orange');

// output the image
$canvas->setImageFormat('png');
header("Content-Type: image/png");
echo
$canvas;
exit;

// FUNCTIONS

function image_arc( &$canvas, $sx, $sy, $ex, $ey, $sd, $ed, $color = 'black' ) {

// draw arc on canvas
// $sx, $sy, $ex, $ey specify a bounding rectangle of a circle with the origin in the middle
// $sd, and $ed specify start and end angles in degrees

$draw = new ImagickDraw();
$draw->setFillColor($color);
$draw->setStrokeColor($color);
$draw->setStrokeWidth(1);
$draw->arc($sx, $sy, $ex, $ey, $sd, $ed);
$canvas->drawImage($draw);
}

function
image_pie( &$canvas, $ox, $oy, $radius, $sd, $ed, $color = 'black' ) {

// draw pie segment
// $ox, $oy specify the circle origin
// $sd, and $ed specify start and end angles in degrees
// degrees start from 0 = East, and go clockwise

// position 1 - convert degrees to radians and get first point on perimeter of circle
$x1 = $radius * cos($sd / 180 * 3.1416);
$y1 = $radius * sin($sd / 180 * 3.1416);

// position 2 - convert degrees to radians and get second point on perimeter of circle
$x2 = $radius * cos($ed / 180 * 3.1416);
$y2 = $radius * sin($ed / 180 * 3.1416);

// draw segment triangle - specify the 3 points and draw a polygon
$points = array(array('x' => $ox, 'y' => $oy), array('x' => $ox + $x1, 'y' => $oy + $y1), array('x' => $ox + $x2, 'y' => $oy + $y2));

image_polygon($canvas, $points, $color);

// draw corrsesponding arc to complete the "pie" segment
image_arc($canvas, $ox - $radius, $oy - $radius, $ox + $radius, $oy + $radius, $sd, $ed, $color);
}

function
image_polygon( &$canvas, $points, $color = 'black' ) {

// draw a polygon on canvas

$draw = new ImagickDraw();
$draw->setFillColor($color);
$draw->setStrokeColor($color);
$draw->setStrokeWidth(1);
$draw->polygon($points);
$canvas->drawImage($draw);
}

?>
To Top