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

namespace InterventionImageImagickCommands;

use 
InterventionImageCommandsAbstractCommand;
use 
InterventionImageExceptionNotReadableException;
use 
InterventionImageImage;
use 
InterventionImageImagickColor;
use 
InterventionImageImagickDecoder;

class 
FillCommand extends AbstractCommand
{
    
/**
     * Fills image with color or pattern
     *
     * @param  InterventionImageImage $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 (
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), 00false);

                
// create canvas
                
$canvas = clone $image->getCore();

                
// fill canvas with texture
                
$canvas $canvas->textureImage($filling->getCore());

                
// merge canvas and tile
                
$canvas->compositeImage($tileImagick::COMPOSITE_DEFAULT00);

                
// 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), 00false);

                
// save alpha channel of original image
                
$alpha = clone $image->getCore();

                
// merge original with canvas and tile
                
$image->getCore()->compositeImage($canvasImagick::COMPOSITE_DEFAULT00);
                
$image->getCore()->compositeImage($tileImagick::COMPOSITE_DEFAULT00);

                
// restore alpha channel of original image
                
$image->getCore()->compositeImage($alphaImagick::COMPOSITE_COPYOPACITY00);
            }

        } 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(00$image->getWidth(), $image->getHeight());
                
$image->getCore()->drawImage($draw);
            }
        }

        return 
true;
    }
}
Онлайн: 0
Реклама