ImagickKernel::fromMatrix

(PECL imagick >= 3.3.0)

ImagickKernel::fromMatrix — CrĂ©er un noyau Ă  partir d'une matrice 2D de valeurs

Description

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

CrĂ©e un noyau Ă  partir d'une matrice 2D de valeurs. Chaque valeur doit ĂȘtre soit un flottant (si l'Ă©lĂ©ment doit ĂȘtre utilisĂ©) ou 'false' si l'Ă©lĂ©ment doit ĂȘtre ignorĂ©. Pour les matrices qui ont des tailles impaires dans les deux dimensions, le pixel d'origine sera par dĂ©faut au centre du noyau. Pour toutes les autres tailles de noyau, le pixel d'origine doit ĂȘtre spĂ©cifiĂ©.

Liste de paramĂštres

array

Une matrice (c'est-Ă -dire un tableau 2D) de valeurs qui dĂ©finissent le noyau. Chaque Ă©lĂ©ment doit ĂȘtre soit une valeur flottante, ou FALSE si cet Ă©lĂ©ment ne doit pas ĂȘtre utilisĂ© par le noyau.

array

Quel Ă©lĂ©ment du noyau doit ĂȘtre utilisĂ© comme pixel d'origine. Par exemple, pour une matrice 3x3 spĂ©cifiant l'origine comme [2, 2] spĂ©cifierait que l'Ă©lĂ©ment en bas Ă  droite devrait ĂȘtre le pixel d'origine.

Valeurs de retour

L'objet ImagickKernel généré.

Exemples

Exemple #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(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);
 
    /* créer une ombre portée sur sa propre couche */
    $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 createFromMatrix() {
    $matrix = [
        [0.5, 0, 0.2],
        [0, 1, 0],
        [0.9, 0, false],
    ];

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

    return $kernel;
}
    
function fromMatrix() {
    $kernel = createFromMatrix();
    $imagick = renderKernel($kernel);

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

?>
add a note

User Contributed Notes

There are no user contributed notes for this page.