CakeFest 2017 NYC, the Official CakePHP Conference


(PECL imagick 2.0.0)

ImagickDraw::circleDessine un cercle


bool ImagickDraw::circle ( float $ox , float $oy , float $px , float $py )

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.

Dessine un cercle.

Liste de paramètres


abscisse de l'origine


ordonnée de l'origine


abscisse du périmètre


ordonnée du périmètre

Valeurs de retour

Aucune valeur n'est retournée.


Exemple #1 Exemple avec ImagickDraw::circle()

function circle($strokeColor$fillColor$backgroundColor$originX$originY$endX$endY) {

//Création d'un objet ImagickDraw.
$draw = new \ImagickDraw();

$strokeColor = new \ImagickPixel($strokeColor);
$fillColor = new \ImagickPixel($fillColor);




$imagick = new \Imagick();

header("Content-Type: image/png");


add a note add a note

User Contributed Notes 2 notes

3 years ago
The four values required here are a bit confusing. After all, a circle is defined by three values: the x, y coordinates of the centre, and the radius, r.

The fourth value is redundant, but has to be given, otherwise the function fails. One way of coping with this redundancy is:

= new ImagickDraw ();
//given that $x and $y are the coordinates of the centre, and $r the radius:
$draw->circle ($x, $y, $x + $r, $y);

There are any number of actions which are synonymous with the last, including:
->circle ($x, $y, $x, $y + $r);
$draw->circle ($x, $y, $x - $r, $y);
$draw->circle ($x, $y, $x, $y - $r);
// etc, etc.

Hope this helps.
christian dot reinecke at web dot de
7 years ago
This example creates a circle, one part green, one part red using kind of masks for transparency, which you might know from Photoshop. drawImage() is a quick helper for debug output (see code comments) to help you reproduce the process.

function drawImage(Imagick $im) {
header("Content-Type: image/" . $im->getImageFormat());

// define red/green layer
$layer1 = new Imagick();
$layer1->newImage(100, 100, "none");

$red = new ImagickDraw();
$red->rectangle(0, 0, 50, 100);

$green = new ImagickDraw();
$green->rectangle(50, 0, 100, 100);


# debug output: two rectangles
# drawImage($layer1);

// define circle mask
$layer2 = new Imagick();
$layer2->newImage(100, 100, "none");

$circle = new ImagickDraw();
$circle->circle(50, 50, 48, 98);


# debug output: the mask
# drawImage($layer2);

// use mask
$layer1->compositeImage($layer2, Imagick::COMPOSITE_DSTIN, 0, 0);

# debug output: the result of our mask usage
# drawImage($layer1);

// define background
$layer3 = new Imagick();
$layer3->newImage(100, 100, "none");

$layer3->compositeImage($layer1, Imagick::COMPOSITE_DEFAULT, 0, 0);

// define ring as background
$layer4 = new Imagick();
$layer4->newImage(100, 100, "white"); // this is our background

$ring1 = new ImagickDraw();
$ring1->circle(50, 50, 50, 99);


# debug output: this is a black circle (not our mask, which is similar, but a little bit smaller)
# drawImage($layer4);

// use black circle as background (this creates our circle border)
$layer4->compositeImage($layer3, Imagick::COMPOSITE_DEFAULT, 0, 0);

# debug output: here we go with our circle border
# drawImage($layer4);

// draw separator between red and green rectangle (now semi circles)
$line = new ImagickDraw();
$line->line(50, 1, 50, 99);

// add our separator line


To understand how the COMPOSITE_* constants effect the image merging process, see here:
To Top