PHP 8.1.0 Released!

ImagickKernel::fromMatrix

(PECL imagick >= 3.3.0)

ImagickKernel::fromMatrixОписание

Описание

public static ImagickKernel::fromMatrix(array $matrix, array $origin = ?): ImagickKernel

Создаёт ядро из двумерной матрицы значений. Каждое значение должно быть либо числом с плавающей запятой (если элемент должен использоваться), либо с 'false', если элемент следует пропустить. Для матриц нечётных размеров в обоих измерениях исходным пикселем по умолчанию будет центр ядра. Для всех других размеров ядра необходимо указать исходный пиксель.

Список параметров

array

Матрица (т.е. двумерный массив) значений, определяющих ядро. Каждый элемент должен быть либо числом с плавающей запятой, либо значением FALSE, если этот элемент не должен использоваться ядром.

array

Какой элемент ядра следует использовать в качестве исходного пикселя. Например, для матрицы 3x3, определяющей начало координат как [2, 2], будет указано, что нижний правый элемент должен быть исходным пикселем.

Возвращаемые значения

Созданный ImagickKernel.

Примеры

Пример #1 Пример использования ImagickKernel::fromMatrix()

<?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(00$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/$height/2);
    
$imagickDraw->setFillColor('rgba(0, 0, 0, 0)');
    
$imagickDraw->setStrokeColor('white');
    
$imagickDraw->circle(00$radius 10);
    
$imagickDraw->setStrokeColor('black');
    
$imagickDraw->circle(00$radius0);
    
$imagickDraw->pop();

    
$canvasWidth $width + ($imageMargin);
    
$canvasHeight $height + ($imageMargin);

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

    
$kernel->setImageFormat('png');
    
$kernel->drawImage($imagickDraw);

    
/* создание тени на собственном слое */
    
$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$canvasHeight00);

    
/* накладывает исходный text_layer на shadow_layer */
    
$canvas->compositeImage($kernel, \Imagick::COMPOSITE_OVER00);
    
$canvas->setImageFormat('png');

    return 
$canvas;
}

function 
createFromMatrix() {
    
$matrix = [
        [
0.500.2],
        [
010],
        [
0.90false],
    ];

    
$kernel = \ImagickKernel::fromMatrix($matrix);

    return 
$kernel;
}

function 
fromMatrix() {
    
$kernel createFromMatrix();
    
$imagick renderKernel($kernel);

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

?>

add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top