ImagickKernel::fromMatrix

(PECL imagick >= 3.3.0)

ImagickKernel::fromMatrix2次元の値の行列からカーネルを作成する

説明

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

2次元の値の行列からカーネルを作成します。各値は float (要素を使用する場合) または 'false' (要素をスキップする場合) のいずれかでなければなりません。 両方の次元が奇数サイズの行列の場合、原点ピクセルはデフォルトでカーネルの 中心になります。その他のすべてのカーネルサイズでは、原点ピクセルを 指定する必要があります。

パラメータ

array

カーネルを定義する値の行列 (すなわち2次元配列)。各要素は float 値か、 その要素をカーネルで使用しない場合は 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(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);

/* 別レイヤーにドロップシャドウを作成 */
$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);

/* 元のテキストレイヤーをシャドウレイヤーに合成 */
$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.
To Top