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

namespace InterventionImageImagickCommands;

use 
InterventionImageCommandsAbstractCommand;

class 
MaskCommand extends AbstractCommand
{
    
/**
     * Applies an alpha mask to an image
     *
     * @param  InterventionImageImage $image
     * @return boolean
     */
    
public function execute($image)
    {
        
$mask_source $this->argument(0)->value();
        
$mask_w_alpha $this->argument(1)->type('bool')->value(false);

        
// get imagick
        
$imagick $image->getCore();

        
// build mask image from source
        
$mask $image->getDriver()->init($mask_source);

        
// resize mask to size of current image (if necessary)
        
$image_size $image->getSize();
        if (
$mask->getSize() != $image_size) {
            
$mask->resize($image_size->width$image_size->height);
        }

        
$imagick->setImageMatte(true);

        if (
$mask_w_alpha) {

            
// just mask with alpha map
            
$imagick->compositeImage($mask->getCore(), Imagick::COMPOSITE_DSTIN00);

        } else {

            
// get alpha channel of original as greyscale image
            
$original_alpha = clone $imagick;
            
$original_alpha->separateImageChannel(Imagick::CHANNEL_ALPHA);

            
// use red channel from mask ask alpha
            
$mask_alpha = clone $mask->getCore();
            
$mask_alpha->compositeImage($mask->getCore(), Imagick::COMPOSITE_DEFAULT00);
            
// $mask_alpha->setImageAlphaChannel(Imagick::ALPHACHANNEL_DEACTIVATE);
            
$mask_alpha->separateImageChannel(Imagick::CHANNEL_ALL);

            
// combine both alphas from original and mask
            
$original_alpha->compositeImage($mask_alphaImagick::COMPOSITE_COPYOPACITY00);

            
// mask the image with the alpha combination
            
$imagick->compositeImage($original_alphaImagick::COMPOSITE_DSTIN00);
        }

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