コード例 #1
0
ファイル: RotateCommand.php プロジェクト: alvarobfdev/applog
 /**
  * Rotates image counter clockwise
  *
  * @param  \Intervention\Image\Image $image
  * @return boolean
  */
 public function execute($image)
 {
     $angle = $this->argument(0)->type('numeric')->required()->value();
     $color = $this->argument(1)->value();
     $color = new Color($color);
     // rotate image
     $image->getCore()->rotateImage($color->getPixel(), $angle * -1);
     return true;
 }
コード例 #2
0
ファイル: LineShape.php プロジェクト: hilmysyarif/sic
 /**
  * Draw current instance of line to given endpoint on given image
  *
  * @param  Image   $image
  * @param  integer $x
  * @param  integer $y
  * @return boolean
  */
 public function applyToImage(Image $image, $x = 0, $y = 0)
 {
     $line = new \ImagickDraw();
     $color = new Color($this->color);
     $line->setStrokeColor($color->getPixel());
     $line->setStrokeWidth($this->width);
     $line->line($this->x, $this->y, $x, $y);
     $image->getCore()->drawImage($line);
     return true;
 }
コード例 #3
0
 /**
  * Read color information from a certain position
  *
  * @param  \Intervention\Image\Image $image
  * @return boolean
  */
 public function execute($image)
 {
     $x = $this->argument(0)->type('digit')->required()->value();
     $y = $this->argument(1)->type('digit')->required()->value();
     $format = $this->argument(2)->type('string')->value('array');
     // pick color
     $color = new Color($image->getCore()->getImagePixelColor($x, $y));
     // format to output
     $this->setOutput($color->format($format));
     return true;
 }
コード例 #4
0
ファイル: Driver.php プロジェクト: hilmysyarif/sic
 /**
  * Creates new image instance
  *
  * @param  integer $width
  * @param  integer $height
  * @param  string  $background
  * @return \Intervention\Image\Image
  */
 public function newImage($width, $height, $background = null)
 {
     $background = new Color($background);
     // create empty core
     $core = new \Imagick();
     $core->newImage($width, $height, $background->getPixel(), 'png');
     $core->setType(\Imagick::IMGTYPE_UNDEFINED);
     $core->setImagetype(\Imagick::IMGTYPE_UNDEFINED);
     $core->setColorspace(\Imagick::COLORSPACE_UNDEFINED);
     // build image
     $image = new \Intervention\Image\Image(new self(), $core);
     return $image;
 }
コード例 #5
0
 /**
  * Draws one pixel to a given image
  *
  * @param  Intervention\Image\Image $image
  * @return boolean
  */
 public function execute($image)
 {
     $color = $this->argument(0)->required()->value();
     $color = new Color($color);
     $x = $this->argument(1)->type('integer')->required()->value();
     $y = $this->argument(2)->type('integer')->required()->value();
     // prepare pixel
     $draw = new \ImagickDraw();
     $draw->setFillColor($color->getPixel());
     $draw->point($x, $y);
     // apply pixel
     return $image->getCore()->drawImage($draw);
 }
コード例 #6
0
ファイル: RectangleShape.php プロジェクト: hilmysyarif/sic
 /**
  * Draw rectangle to given image at certain position
  *
  * @param  Image   $image
  * @param  integer $x
  * @param  integer $y
  * @return boolean
  */
 public function applyToImage(Image $image, $x = 0, $y = 0)
 {
     $rectangle = new \ImagickDraw();
     // set background
     $bgcolor = new Color($this->background);
     $rectangle->setFillColor($bgcolor->getPixel());
     // set border
     if ($this->hasBorder()) {
         $border_color = new Color($this->border_color);
         $rectangle->setStrokeWidth($this->border_width);
         $rectangle->setStrokeColor($border_color->getPixel());
     }
     $rectangle->rectangle($this->x1, $this->y1, $this->x2, $this->y2);
     $image->getCore()->drawImage($rectangle);
     return true;
 }
コード例 #7
0
ファイル: PolygonShape.php プロジェクト: alvarobfdev/applog
 /**
  * Draw polygon on given image
  *
  * @param  Image   $image
  * @param  integer $x
  * @param  integer $y
  * @return boolean
  */
 public function applyToImage(Image $image, $x = 0, $y = 0)
 {
     $polygon = new \ImagickDraw();
     // set background
     $bgcolor = new Color($this->background);
     $polygon->setFillColor($bgcolor->getPixel());
     // set border
     if ($this->hasBorder()) {
         $border_color = new Color($this->border_color);
         $polygon->setStrokeWidth($this->border_width);
         $polygon->setStrokeColor($border_color->getPixel());
     }
     $polygon->polygon($this->points);
     $image->getCore()->drawImage($polygon);
     return true;
 }
コード例 #8
0
ファイル: EllipseShape.php プロジェクト: alvarobfdev/applog
 /**
  * Draw ellipse instance on given image
  *
  * @param  Image   $image
  * @param  integer $x
  * @param  integer $y
  * @return boolean
  */
 public function applyToImage(Image $image, $x = 0, $y = 0)
 {
     $circle = new \ImagickDraw();
     // set background
     $bgcolor = new Color($this->background);
     $circle->setFillColor($bgcolor->getPixel());
     // set border
     if ($this->hasBorder()) {
         $border_color = new Color($this->border_color);
         $circle->setStrokeWidth($this->border_width);
         $circle->setStrokeColor($border_color->getPixel());
     }
     $circle->ellipse($x, $y, $this->width / 2, $this->height / 2, 0, 360);
     $image->getCore()->drawImage($circle);
     return true;
 }
コード例 #9
0
ファイル: Font.php プロジェクト: hilmysyarif/sic
 /**
  * Draws font to given image at given position
  *
  * @param  Image   $image
  * @param  integer $posx
  * @param  integer $posy
  * @return void
  */
 public function applyToImage(Image $image, $posx = 0, $posy = 0)
 {
     // build draw object
     $draw = new \ImagickDraw();
     $draw->setStrokeAntialias(true);
     $draw->setTextAntialias(true);
     // set font file
     if ($this->hasApplicableFontFile()) {
         $draw->setFont($this->file);
     } else {
         throw new \Intervention\Image\Exception\RuntimeException("Font file must be provided to apply text to image.");
     }
     // parse text color
     $color = new Color($this->color);
     $draw->setFontSize($this->size);
     $draw->setFillColor($color->getPixel());
     // align horizontal
     switch (strtolower($this->align)) {
         case 'center':
             $align = \Imagick::ALIGN_CENTER;
             break;
         case 'right':
             $align = \Imagick::ALIGN_RIGHT;
             break;
         default:
             $align = \Imagick::ALIGN_LEFT;
             break;
     }
     $draw->setTextAlignment($align);
     // align vertical
     if (strtolower($this->valign) != 'bottom') {
         // calculate box size
         $dimensions = $image->getCore()->queryFontMetrics($draw, $this->text);
         // corrections on y-position
         switch (strtolower($this->valign)) {
             case 'center':
             case 'middle':
                 $posy = $posy + $dimensions['textHeight'] * 0.65 / 2;
                 break;
             case 'top':
                 $posy = $posy + $dimensions['textHeight'] * 0.65;
                 break;
         }
     }
     // apply to image
     $image->getCore()->annotateImage($draw, $posx, $posy, $this->angle * -1, $this->text);
 }
コード例 #10
0
 /**
  * Fills image with color or pattern
  *
  * @param  \Intervention\Image\Image $image
  * @return boolean
  */
 public function execute($image)
 {
     $filling = $this->argument(0)->value();
     $x = $this->argument(1)->type('digit')->value();
     $y = $this->argument(2)->type('digit')->value();
     $imagick = $image->getCore();
     try {
         // set image filling
         $source = new Decoder();
         $filling = $source->init($filling);
     } catch (\Intervention\Image\Exception\NotReadableException $e) {
         // set solid color filling
         $filling = new Color($filling);
     }
     // flood fill if coordinates are set
     if (is_int($x) && is_int($y)) {
         // flood fill with texture
         if ($filling instanceof Image) {
             // create tile
             $tile = clone $image->getCore();
             // mask away color at position
             $tile->transparentPaintImage($tile->getImagePixelColor($x, $y), 0, 0, false);
             // create canvas
             $canvas = clone $image->getCore();
             // fill canvas with texture
             $canvas = $canvas->textureImage($filling->getCore());
             // merge canvas and tile
             $canvas->compositeImage($tile, \Imagick::COMPOSITE_DEFAULT, 0, 0);
             // replace image core
             $image->setCore($canvas);
             // flood fill with color
         } elseif ($filling instanceof Color) {
             // create canvas with filling
             $canvas = new \Imagick();
             $canvas->newImage($image->getWidth(), $image->getHeight(), $filling->getPixel(), 'png');
             // create tile to put on top
             $tile = clone $image->getCore();
             // mask away color at pos.
             $tile->transparentPaintImage($tile->getImagePixelColor($x, $y), 0, 0, false);
             // save alpha channel of original image
             $alpha = clone $image->getCore();
             // merge original with canvas and tile
             $image->getCore()->compositeImage($canvas, \Imagick::COMPOSITE_DEFAULT, 0, 0);
             $image->getCore()->compositeImage($tile, \Imagick::COMPOSITE_DEFAULT, 0, 0);
             // restore alpha channel of original image
             $image->getCore()->compositeImage($alpha, \Imagick::COMPOSITE_COPYOPACITY, 0, 0);
         }
     } else {
         if ($filling instanceof Image) {
             // fill whole image with texture
             $image->setCore($image->getCore()->textureImage($filling->getCore()));
         } elseif ($filling instanceof Color) {
             // fill whole image with color
             $draw = new \ImagickDraw();
             $draw->setFillColor($filling->getPixel());
             $draw->rectangle(0, 0, $image->getWidth(), $image->getHeight());
             $image->getCore()->drawImage($draw);
         }
     }
     return true;
 }
コード例 #11
0
ファイル: Font.php プロジェクト: EdgarPost/image
 /**
  * Draws font to given image at given position
  *
  * @param  Image   $image
  * @param  integer $posx
  * @param  integer $posy
  * @return void
  */
 public function applyToImage(Image $image, $posx = 0, $posy = 0)
 {
     $draw = new \ImagickDraw();
     if ($this->hasApplicableFontFile()) {
         $draw->setStrokeAntialias(true);
         $draw->setTextAntialias(true);
         // font file
         $draw->setFont($this->file);
         // font size
         $draw->setFontSize($this->size);
         // parse text color
         $color = new Color($this->color);
         $draw->setFillColor($color->getPixel());
     } else {
         throw new \Intervention\Image\Exception\RuntimeException("Font file must be provided to apply text to image.");
     }
     // format text
     $text = $this->format();
     // box size
     $box = $this->isBoxed() ? $this->box : $this->getBoxSize($text);
     // create empty canvas
     $canvas = $image->getDriver()->newImage($box->getWidth() + self::PADDING * 2, $box->getHeight() + self::PADDING * 2)->getCore();
     $lines = $this->getLines($text);
     $baseline = $this->getCoreBoxSize($lines[0]);
     $box->align(sprintf('%s-%s', $this->align, 'top'));
     $ystart = 0;
     if ($this->isBoxed()) {
         switch (strtolower($this->valign)) {
             case 'bottom':
                 $ystart = $box->getHeight() - $this->getBoxSize($text)->getHeight();
                 break;
             case 'center':
             case 'middle':
                 $ystart = ($box->getHeight() - $this->getBoxSize($text)->getHeight()) / 2;
                 break;
         }
     }
     // write line by line
     foreach ($lines as $count => $line) {
         $linesize = $this->getCoreBoxSize(trim($line));
         $relative = $box->relativePosition($linesize->align($this->align));
         // write line of text
         $canvas->annotateImage($draw, self::PADDING + $relative->x, self::PADDING + $ystart + $baseline->getHeight() + $count * $this->lineHeight * $this->size * 1.5, 0, trim($line));
     }
     // valign
     switch (strtolower($this->valign)) {
         case 'top':
             # nothing to do...
             break;
         case 'center':
         case 'middle':
             $box->pivot->moveY($box->getHeight() / 2);
             break;
         case 'bottom':
             $box->pivot->moveY($box->getHeight());
             break;
         default:
         case 'baseline':
             $box->pivot->moveY($baseline->getHeight());
             break;
     }
     if ($this->isBoxed()) {
         $box->align('top-left');
     }
     // rotate canvas
     if ($this->angle != 0) {
         $canvas->rotateImage(new \ImagickPixel('none'), $this->angle * -1);
         $box->rotate($this->angle);
     }
     // insert canvas
     foreach ($image as $frame) {
         $frame->getCore()->compositeImage($canvas, \Imagick::COMPOSITE_DEFAULT, $posx - $box->pivot->x - self::PADDING, $posy - $box->pivot->y - self::PADDING);
     }
 }
コード例 #12
0
ファイル: ImagickColorTest.php プロジェクト: hilmysyarif/sic
 public function testDiffers()
 {
     $c1 = new Color(array(0, 0, 0));
     $c2 = new Color(array(0, 0, 0));
     $this->assertEquals(false, $c1->differs($c2));
     $c1 = new Color(array(1, 0, 0));
     $c2 = new Color(array(0, 0, 0));
     $this->assertEquals(true, $c1->differs($c2));
     $c1 = new Color(array(1, 0, 0));
     $c2 = new Color(array(0, 0, 0));
     $this->assertEquals(false, $c1->differs($c2, 10));
     $c1 = new Color(array(127, 127, 127));
     $c2 = new Color(array(0, 0, 0));
     $this->assertEquals(true, $c1->differs($c2, 49));
     $c1 = new Color(array(127, 127, 127));
     $c2 = new Color(array(0, 0, 0));
     $this->assertEquals(false, $c1->differs($c2, 50));
 }