function renderImage3() { //dupe of two ? $draw = new \ImagickDraw(); $strokeColor = new \ImagickPixel($this->strokeColor); $fillColor = new \ImagickPixel($this->fillColor); $draw->setStrokeWidth(1); $draw->setStrokeColor($strokeColor); $draw->setFillColor($fillColor); $fillRules = [\Imagick::FILLRULE_NONZERO, \Imagick::FILLRULE_EVENODD]; $points = 11; $size = 150; $draw->translate(175, 160); for ($x = 0; $x < 2; $x++) { //$pointsArray = array(); $draw->setFillRule($fillRules[$x]); $draw->pathStart(); for ($n = 0; $n < $points * 2; $n++) { if ($n >= $points) { $angle = fmod($n * 360 * 4 / $points, 360) * pi() / 180; } else { $angle = fmod($n * 360 * 3 / $points, 360) * pi() / 180; } $positionX = $size * sin($angle); $positionY = $size * cos($angle); if ($n == 0) { $draw->pathMoveToAbsolute($positionX, $positionY); } else { $draw->pathLineToAbsolute($positionX, $positionY); } } $draw->pathClose(); $draw->pathFinish(); $draw->translate(325, 0); } //Create an image object which the draw commands can be rendered into $image = new \Imagick(); //$image->newImage(700, 320, $this->backgroundColor); $image->newImage(700, 320, "#eee"); $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(); }
function test_path(&$canvas) { $draw = new ImagickDraw(); $draw->setFillColor('transparent'); $draw->setStrokeColor('blue'); $draw->setStrokeWidth(4); $draw->pathStart(); $draw->pathMoveToAbsolute(300, 10); $draw->pathLineToHorizontalRelative(50); $draw->pathLineToVerticalRelative(50); $draw->pathEllipticArcRelative(40, 30, 30, false, true, 60, 10); $draw->pathLineToAbsolute(444, 22); $draw->pathFinish(); $draw->pathStart(); $draw->pathMoveToAbsolute(480, 30); $draw->pathCurveToAbsolute(520, 40, 560, 10, 600, 20); $draw->pathCurveToQuadraticBezierRelative(30, 10, -60, 80); $draw->pathCurveToQuadraticBezierSmoothRelative(20, -50); $draw->pathClose(); $draw->pathFinish(); $canvas->drawImage($draw); }
function drawBezierChart($points, $roundness) { //Calculate the tangent vector for each point that you're drawing. $tangents = $this->getPointTangents($points); $positions = $this->getPointPositions($points); $numberOfPoints = count($points); $this->draw->setFillColor('#B42AAF9F'); $this->draw->translate($this->chartWidth / 2, $this->chartHeight / 2); $this->draw->pathStart(); $this->draw->pathMoveToAbsolute($positions[0][0], $positions[0][1]); //Scale that by the 'value' of each point aka the distance from the chart's centre. //Also scale it by how rounded you want the chart. for ($i = 0; $i < $numberOfPoints; $i++) { list($nextPositionX, $nextPositionY) = $positions[($i + 1) % $numberOfPoints]; list($controlPoint1X, $controlPoint1Y) = $this->getControlPoint($points[$i], $positions[$i], $tangents[$i], 1, $roundness, count($points)); list($controlPoint2X, $controlPoint2Y) = $this->getControlPoint($points[($i + 1) % $numberOfPoints], $positions[($i + 1) % $numberOfPoints], $tangents[($i + 1) % $numberOfPoints], -1, $roundness, count($points)); $this->draw->pathCurveToAbsolute($controlPoint1X, $controlPoint1Y, $controlPoint2X, $controlPoint2Y, $nextPositionX, $nextPositionY); } $this->draw->pathClose(); $this->draw->pathFinish(); foreach ($this->points as $point) { $this->draw->circle($point[0], $point[1], $point[2], $point[3]); } }
function setFillRule($fillColor, $strokeColor, $backgroundColor) { $draw = new \ImagickDraw(); $draw->setStrokeWidth(1); $draw->setStrokeColor($strokeColor); $draw->setFillColor($fillColor); $fillRules = [\Imagick::FILLRULE_NONZERO, \Imagick::FILLRULE_EVENODD]; $points = 11; $size = 150; $draw->translate(175, 160); for ($x = 0; $x < 2; $x++) { $draw->setFillRule($fillRules[$x]); $draw->pathStart(); for ($n = 0; $n < $points * 2; $n++) { if ($n >= $points) { $angle = fmod($n * 360 * 4 / $points, 360) * pi() / 180; } else { $angle = fmod($n * 360 * 3 / $points, 360) * pi() / 180; } $positionX = $size * sin($angle); $positionY = $size * cos($angle); if ($n == 0) { $draw->pathMoveToAbsolute($positionX, $positionY); } else { $draw->pathLineToAbsolute($positionX, $positionY); } } $draw->pathClose(); $draw->pathFinish(); $draw->translate(325, 0); } $image = new \Imagick(); $image->newImage(700, 320, $backgroundColor); $image->setImageFormat("png"); $image->drawImage($draw); header("Content-Type: image/png"); echo $image->getImageBlob(); }