Seditio Source
Root |
./othercms/croogo-4.0.7/vendor/intervention/image/src/Intervention/Image/Imagick/Commands/ResizeCanvasCommand.php
<?php

namespace Intervention\Image\Imagick\Commands;

use
Intervention\Image\Commands\AbstractCommand;

class
ResizeCanvasCommand extends AbstractCommand
{
   
/**
     * Resizes image boundaries
     *
     * @param  \Intervention\Image\Image $image
     * @return boolean
     */
   
public function execute($image)
    {
       
$width = $this->argument(0)->type('digit')->required()->value();
       
$height = $this->argument(1)->type('digit')->required()->value();
       
$anchor = $this->argument(2)->value('center');
       
$relative = $this->argument(3)->type('boolean')->value(false);
       
$bgcolor = $this->argument(4)->value();

       
$original_width = $image->getWidth();
       
$original_height = $image->getHeight();

       
// check of only width or height is set
       
$width = is_null($width) ? $original_width : intval($width);
       
$height = is_null($height) ? $original_height : intval($height);

       
// check on relative width/height
       
if ($relative) {
           
$width = $original_width + $width;
           
$height = $original_height + $height;
        }

       
// check for negative width/height
       
$width = ($width <= 0) ? $width + $original_width : $width;
       
$height = ($height <= 0) ? $height + $original_height : $height;

       
// create new canvas
       
$canvas = $image->getDriver()->newImage($width, $height, $bgcolor);

       
// set copy position
       
$canvas_size = $canvas->getSize()->align($anchor);
       
$image_size = $image->getSize()->align($anchor);
       
$canvas_pos = $image_size->relativePosition($canvas_size);
       
$image_pos = $canvas_size->relativePosition($image_size);

        if (
$width <= $original_width) {
           
$dst_x = 0;
           
$src_x = $canvas_pos->x;
           
$src_w = $canvas_size->width;
        } else {
           
$dst_x = $image_pos->x;
           
$src_x = 0;
           
$src_w = $original_width;
        }

        if (
$height <= $original_height) {
           
$dst_y = 0;
           
$src_y = $canvas_pos->y;
           
$src_h = $canvas_size->height;
        } else {
           
$dst_y = $image_pos->y;
           
$src_y = 0;
           
$src_h = $original_height;
        }

       
// make image area transparent to keep transparency
        // even if background-color is set
       
$rect = new \ImagickDraw;
       
$fill = $canvas->pickColor(0, 0, 'hex');
       
$fill = $fill == '#ff0000' ? '#00ff00' : '#ff0000';
       
$rect->setFillColor($fill);
       
$rect->rectangle($dst_x, $dst_y, $dst_x + $src_w - 1, $dst_y + $src_h - 1);
       
$canvas->getCore()->drawImage($rect);
       
$canvas->getCore()->transparentPaintImage($fill, 0, 0, false);

       
$canvas->getCore()->setImageColorspace($image->getCore()->getImageColorspace());

       
// copy image into new canvas
       
$image->getCore()->cropImage($src_w, $src_h, $src_x, $src_y);
       
$canvas->getCore()->compositeImage($image->getCore(), \Imagick::COMPOSITE_DEFAULT, $dst_x, $dst_y);
       
$canvas->getCore()->setImagePage(0,0,0,0);

       
// set new core to canvas
       
$image->setCore($canvas->getCore());

        return
true;
    }
}