Вход Регистрация
Файл: system/vendor/intervention/image/src/Intervention/Image/Imagick/Commands/ResizeCanvasCommand.php
Строк: 94
<?php

namespace InterventionImageImagickCommands;

use 
InterventionImageCommandsAbstractCommand;

class 
ResizeCanvasCommand extends AbstractCommand
{
    
/**
     * Resizes image boundaries
     *
     * @param  InterventionImageImage $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(00'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($fill00false);

        
$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;
    }
}
Онлайн: 1
Реклама