ImagickKernel
PHP Manual

ImagickKernel::fromBuiltIn

(PECL imagick >= 3.3.0)

ImagickKernel::fromBuiltIn — Description

説明

public static ImagickKernel ImagickKernel::fromBuiltin ( string $kernelType , string $kernelString )

Create a kernel from a builtin in kernel. See http://www.imagemagick.org/Usage/morphology/#kernel for examples. Currently the 'rotation' symbols are not supported. Example: $diamondKernel = ImagickKernel::fromBuiltIn(\Imagick::KERNEL_DIAMOND, "2");

パラメータ

kerneltype

The type of kernel to build e.g. \Imagick::KERNEL_DIAMOND

kernelString

A string that describes the parameters e.g. "4,2.5"

返り値

例

例1 ImagickKernel::fromBuiltin()

<?php


function renderKernel(ImagickKernel $imagickKernel) {
    
$matrix = $imagickKernel->getMatrix();
    
    
$imageMargin = 20;
    
    
$tileSize = 20;
    
$tileSpace = 4;
    
$shadowSigma = 4;
    
$shadowDropX = 20;
    
$shadowDropY = 0;

    
$radius = ($tileSize / 2) * 0.9;
    
    
$rows = count($matrix);
    
$columns = count($matrix[0]);
 
    
$imagickDraw = new \ImagickDraw();

    
$imagickDraw->setFillColor('#afafaf');
    
$imagickDraw->setStrokeColor('none');
    
    
$imagickDraw->translate($imageMargin, $imageMargin);
    
$imagickDraw->push();

    
ksort($matrix);
    
    foreach (
$matrix as $row) {
        
ksort($row);
        
$imagickDraw->push();
        foreach (
$row as $cell) {
            if (
$cell !== false) {
                
$color = intval(255 * $cell);
                
$colorString = sprintf("rgb(%f, %f, %f)", $color, $color, $color);
                
$imagickDraw->setFillColor($colorString);
                
$imagickDraw->rectangle(0, 0, $tileSize, $tileSize);
            }
            
$imagickDraw->translate(($tileSize + $tileSpace), 0);
        }
        
$imagickDraw->pop();
        
$imagickDraw->translate(0, ($tileSize + $tileSpace));
    }

    
$imagickDraw->pop();

    
$width = ($columns * $tileSize) + (($columns - 1) * $tileSpace);
    
$height = ($rows * $tileSize) + (($rows - 1) * $tileSpace);

    
$imagickDraw->push();
    
$imagickDraw->translate($width/2 , $height/2);
    
$imagickDraw->setFillColor('rgba(0, 0, 0, 0)');
    
$imagickDraw->setStrokeColor('white');
    
$imagickDraw->circle(0, 0, $radius - 1, 0);
    
$imagickDraw->setStrokeColor('black');
    
$imagickDraw->circle(0, 0, $radius, 0);
    
$imagickDraw->pop();

    
$canvasWidth = $width + (2 * $imageMargin); 
    
$canvasHeight = $height + (2 * $imageMargin);

    
$kernel = new \Imagick();
    
$kernel->newPseudoImage(
        
$canvasWidth,
        
$canvasHeight,
        
'canvas:none'
    
);

    
$kernel->setImageFormat('png');
    
$kernel->drawImage($imagickDraw);
 
    
/* create drop shadow on it's own layer */
    
$canvas = $kernel->clone();
    
$canvas->setImageBackgroundColor(new \ImagickPixel('rgb(0, 0, 0)'));
    
$canvas->shadowImage(100, $shadowSigma, $shadowDropX, $shadowDropY);

    
$canvas->setImagePage($canvasWidth, $canvasHeight, -5, -5);
    
$canvas->cropImage($canvasWidth, $canvasHeight, 0, 0);
    
    
/* composite original text_layer onto shadow_layer */
    
$canvas->compositeImage($kernel, \Imagick::COMPOSITE_OVER, 0, 0);
    
$canvas->setImageFormat('png');

    return 
$canvas;
}


function 
createFromBuiltin($kernelType, $kernelFirstTerm, $kernelSecondTerm, $kernelThirdTerm) {
    
$string = '';

    if (
$kernelFirstTerm != false && strlen(trim($kernelFirstTerm)) != 0) {
        
$string .= $kernelFirstTerm;

        if (
$kernelSecondTerm != false && strlen(trim($kernelSecondTerm)) != 0) {
            
$string .= ','.$kernelSecondTerm;
            if (
$kernelThirdTerm != false && strlen(trim($kernelThirdTerm)) != 0) {
                
$string .= ','.$kernelThirdTerm;
            }
        }
    }

    
$kernel = ImagickKernel::fromBuiltIn(
        
$kernelType,
        
$string
    
);

    return 
$kernel;
}
    
function 
fromBuiltin($kernelType, $kernelFirstTerm, $kernelSecondTerm, $kernelThirdTerm) {
    
$diamondKernel = createFromBuiltin($kernelType, $kernelFirstTerm, $kernelSecondTerm, $kernelThirdTerm);
    
$imagick = renderKernel($diamondKernel);

    
header("Content-Type: image/png");
    echo 
$imagick->getImageBlob();
}

fromBuiltin(\Imagick::KERNEL_DIAMOND, 2, false, false);


?>


ImagickKernel
PHP Manual