Exemplo n.º 1
0
 /**
  * @param ImageInterface $image
  * @return Image
  */
 public function draw($image)
 {
     // Localize vars
     $width = $image->getWidth();
     $height = $image->getHeight();
     $imagick = $image->getCore();
     $draw = new \ImagickDraw();
     $strokeColor = new \ImagickPixel($this->getColor()->getHexString());
     $fillColor = new \ImagickPixel('rgba(0,0,0,0)');
     $draw->setStrokeOpacity(1);
     $draw->setStrokeColor($strokeColor);
     $draw->setFillColor($fillColor);
     list($x1, $y1) = $this->point1;
     list($x2, $y2) = $this->control;
     list($x3, $y3) = $this->point2;
     $draw->pathStart();
     $draw->pathMoveToAbsolute($x1, $y1);
     $draw->pathCurveToQuadraticBezierAbsolute($x2, $y2, $x3, $y3);
     $draw->pathFinish();
     // Render the draw commands in the ImagickDraw object
     $imagick->drawImage($draw);
     $type = $image->getType();
     $file = $image->getImageFile();
     return new Image($imagick, $file, $width, $height, $type);
     // Create new image with updated core
 }
Exemplo n.º 2
0
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);
}
Exemplo n.º 3
0
 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();
 }
Exemplo n.º 4
0
 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]);
     }
 }
Exemplo n.º 5
0
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();
}