note 91688 modified in function.imagickdraw-circle by thiago

From: Date: Tue, 23 Jun 2009 13:43:15 +0000
Subject: note 91688 modified in function.imagickdraw-circle by thiago
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-157267@lists.php.net to get a copy of this message
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. <?php function drawImage(Imagick $im) { $im->setCompressionQuality(100); $im->setImageFormat("jpg"); header("Content-Type: image/" . $im->getImageFormat()); echo $im; exit; } // define red/green layer $layer1 = new Imagick(); $layer1->newImage(100, 100, "none"); $red = new ImagickDraw(); $red->setFillColor("#FF0000"); $red->rectangle(0, 0, 50, 100); $green = new ImagickDraw(); $green->setFillColor("#00FF00"); $green->rectangle(50, 0, 100, 100); $layer1->drawImage($red); $layer1->drawImage($green); # debug output: two rectangles # drawImage($layer1); // define circle mask $layer2 = new Imagick(); $layer2->newImage(100, 100, "none"); $circle = new ImagickDraw(); $circle->setFillColor("#FFFFFF"); $circle->circle(50, 50, 48, 98); $layer2->drawImage($circle); # 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->setFillColor("black"); $ring1->circle(50, 50, 50, 99); $layer4->drawImage($ring1); # 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->setStrokeWidth(1); $line->setStrokeColor("black"); $line->line(50, 1, 50, 99); // add our separator line $layer4->drawImage($line); drawImage($layer4); ?> To understand how the COMPOSITE_* constants effect the image merging process, see here: http://www.imagemagick.org/Usage/compose/#duff-porter --was-- 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) { $im->setCompressionQuality(100); $im->setImageFormat("jpg"); header("Content-Type: image/" . $im->getImageFormat()); echo $im; exit; } // define red/green layer $layer1 = new Imagick(); $layer1->newImage(100, 100, "none"); $red = new ImagickDraw(); $red->setFillColor("#FF0000"); $red->rectangle(0, 0, 50, 100); $green = new ImagickDraw(); $green->setFillColor("#00FF00"); $green->rectangle(50, 0, 100, 100); $layer1->drawImage($red); $layer1->drawImage($green); # debug output: two rectangles # drawImage($layer1); // define circle mask $layer2 = new Imagick(); $layer2->newImage(100, 100, "none"); $circle = new ImagickDraw(); $circle->setFillColor("#FFFFFF"); $circle->circle(50, 50, 48, 98); $layer2->drawImage($circle); # 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->setFillColor("black"); $ring1->circle(50, 50, 50, 99); $layer4->drawImage($ring1); # 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->setStrokeWidth(1); $line->setStrokeColor("black"); $line->line(50, 1, 50, 99); // add our separator line $layer4->drawImage($line); drawImage($layer4); -- To understand how the COMPOSITE_* constants effect the image merging process, see here: http://www.imagemagick.org/Usage/compose/#duff-porter http://php.net/manual/en/function.imagickdraw-circle.php

« previous php.notes (#157267) next »