15 $width = $this->
argument(0)->type(
'digit')->required()->value();
16 $height = $this->
argument(1)->type(
'digit')->required()->value();
17 $anchor = $this->
argument(2)->value(
'center');
18 $relative = $this->
argument(3)->type(
'boolean')->value();
19 $bgcolor = $this->
argument(4)->value();
21 $original_width = $image->getWidth();
22 $original_height = $image->getHeight();
25 $width = is_null($width) ? $original_width : intval($width);
26 $height = is_null($height) ? $original_height : intval($height);
30 $width = $original_width + $width;
31 $height = $original_height + $height;
35 $width = ($width <= 0) ? $width + $original_width : $width;
36 $height = ($height <= 0) ? $height + $original_height : $height;
39 $canvas = $image->getDriver()->newImage($width, $height, $bgcolor);
42 $canvas_size = $canvas->getSize()->align($anchor);
43 $image_size = $image->getSize()->align($anchor);
44 $canvas_pos = $image_size->relativePosition($canvas_size);
45 $image_pos = $canvas_size->relativePosition($image_size);
47 if ($width <= $original_width) {
49 $src_x = $canvas_pos->x;
50 $src_w = $canvas_size->width;
52 $dst_x = $image_pos->x;
54 $src_w = $original_width;
57 if ($height <= $original_height) {
59 $src_y = $canvas_pos->y;
60 $src_h = $canvas_size->height;
62 $dst_y = $image_pos->y;
64 $src_h = $original_height;
69 $rect = new \ImagickDraw;
70 $fill = $canvas->pickColor(0, 0,
'hex');
71 $fill = $fill ==
'#ff0000' ?
'#00ff00' :
'#ff0000';
72 $rect->setFillColor($fill);
73 $rect->rectangle($dst_x, $dst_y, $dst_x + $src_w - 1, $dst_y + $src_h - 1);
74 $canvas->getCore()->drawImage($rect);
75 $canvas->getCore()->transparentPaintImage($fill, 0, 0,
false);
77 $canvas->getCore()->setImageColorspace($image->getCore()->getImageColorspace());
80 $image->getCore()->cropImage($src_w, $src_h, $src_x, $src_y);
81 $canvas->getCore()->compositeImage($image->getCore(), \Imagick::COMPOSITE_DEFAULT, $dst_x, $dst_y);
82 $canvas->getCore()->setImagePage(0,0,0,0);
85 $image->setCore($canvas->getCore());