Imagick::sparseColorImage
(PECL imagick 2 >= 2.3.0, PECL imagick 3)
Imagick::sparseColorImage — 色を補間する
説明
$SPARSE_METHOD
, array $arguments
, int $channel
= Imagick::CHANNEL_DEFAULT): bool
数値を含む配列を引数として受け取り、画像全体にわたって見つかった座標の色を補間します。補間には
sparse_method
を用います。
このメソッドは、ImageMagick バージョン 6.4.5 以降で Imagick をコンパイルした場合に使用可能です。
パラメータ
SPARSE_METHOD
-
sparse method 定数 の一覧を参照ください。
arguments
-
座標を含む配列。配列の書式は
array(1,1, 2,45)
のようになります。 channel
-
そのモードで有効なチャネル定数を指定します。 複数のチャネルを適用するには、チャネル定数 をビット演算子で組み合わせます。デフォルトは
Imagick::CHANNEL_DEFAULT
です。 チャネル定数 の一覧を参照ください。
戻り値
成功した場合に true
を返します。
エラー / 例外
エラー時に ImagickException をスローします。
例
例1 SPARSECOLORMETHOD_BARYCENTRIC Imagick::sparseColorImage()
<?php
function renderImageBarycentric2() {
$points = [
[0.30, 0.10, 'red'],
[0.10, 0.80, 'blue'],
[0.70, 0.60, 'lime'],
[0.80, 0.20, 'yellow'],
];
$imagick = createGradientImage(
400, 400,
$points,
\Imagick::SPARSECOLORMETHOD_BARYCENTRIC
);
header("Content-Type: image/png");
echo $imagick->getImageBlob();
}
?>
例2 SPARSECOLORMETHOD_BILINEAR Imagick::sparseColorImage()
<?php
function renderImageBilinear() {
$points = [[0.30, 0.10, 'red'], [0.10, 0.80, 'blue'], [0.70, 0.60, 'lime'], [0.80, 0.20, 'yellow'],];
$imagick = createGradientImage(500, 500, $points, \Imagick::SPARSECOLORMETHOD_BILINEAR);
header("Content-Type: image/png");
echo $imagick->getImageBlob();
}
?>
例3 SPARSECOLORMETHOD_SPEPARDS Imagick::sparseColorImage()
<?php
function renderImageShepards() {
$points = [
[0.30, 0.10, 'red'],
[0.10, 0.80, 'blue'],
[0.70, 0.60, 'lime'],
[0.80, 0.20, 'yellow'],
];
$imagick = createGradientImage(600, 600, $points, \Imagick::SPARSECOLORMETHOD_SPEPARDS);
header("Content-Type: image/png");
echo $imagick->getImageBlob();
}
?>
例4 SPARSECOLORMETHOD_VORONOI Imagick::sparseColorImage()
<?php
function renderImageVoronoi() {
$points = [
[0.30, 0.10, 'red'],
[0.10, 0.80, 'blue'],
[0.70, 0.60, 'lime'],
[0.80, 0.20, 'yellow'],
];
$imagick = createGradientImage(500, 500, $points, \Imagick::SPARSECOLORMETHOD_VORONOI);
header("Content-Type: image/png");
echo $imagick->getImageBlob();
}
?>
例5 SPARSECOLORMETHOD_BARYCENTRIC Imagick::sparseColorImage()
<?php
function renderImageBarycentric() {
$points = [
[0, 0, 'skyblue'],
[-1, 1, 'skyblue'],
[1, 1, 'black'],
];
$imagick = createGradientImage(600, 200, $points, \Imagick::SPARSECOLORMETHOD_BARYCENTRIC);
header("Content-Type: image/png");
echo $imagick->getImageBlob();
}
?>
例6 createGradientImage is used by other examples. Imagick::sparseColorImage()
<?php
function createGradientImage($width, $height, $colorPoints, $sparseMethod, $absolute = false) {
$imagick = new \Imagick();
$imagick->newImage($width, $height, "white");
$imagick->setImageFormat("png");
$barycentricPoints = array();
foreach ($colorPoints as $colorPoint) {
if ($absolute == true) {
$barycentricPoints[] = $colorPoint[0];
$barycentricPoints[] = $colorPoint[1];
}
else {
$barycentricPoints[] = $colorPoint[0] * $width;
$barycentricPoints[] = $colorPoint[1] * $height;
}
if (is_string($colorPoint[2])) {
$imagickPixel = new \ImagickPixel($colorPoint[2]);
}
else if ($colorPoint[2] instanceof \ImagickPixel) {
$imagickPixel = $colorPoint[2];
}
else{
$errorMessage = sprintf(
"Value %s is neither a string nor an ImagickPixel class. Cannot use as a color.",
$colorPoint[2]
);
throw new \InvalidArgumentException(
$errorMessage
);
}
$red = $imagickPixel->getColorValue(\Imagick::COLOR_RED);
$green = $imagickPixel->getColorValue(\Imagick::COLOR_GREEN);
$blue = $imagickPixel->getColorValue(\Imagick::COLOR_BLUE);
$alpha = $imagickPixel->getColorValue(\Imagick::COLOR_ALPHA);
$barycentricPoints[] = $red;
$barycentricPoints[] = $green;
$barycentricPoints[] = $blue;
$barycentricPoints[] = $alpha;
}
$imagick->sparseColorImage($sparseMethod, $barycentricPoints);
return $imagick;
}
?>
User Contributed Notes 1 note
For those curious how to use sparseColorImage() directly without the seperate createGradientImage() function.. here is the format of the array used:
Array (
[0] => 0 // X1 (X coordinate value #1)
[1] => 0 // Y1 (Y coordinate value #1)
[2] => 1 // R (red value between 0 and 1)
[3] => 0 // G (green value between 0 and 1)
[4] => 0 // B (blue value between 0 and 1)
[5] => 1 // A (alpha value between 0 and 1)
[6] => 400 // X2
[7] => 0 // Y2
[8] => 0 // R
[9] => 1 // G
[10] => 0 // B
[11] => 1 // A
[12] => 0 // X3
[13] => 400 // Y3
[14] => 1 // R
[15] => 1 // G
[16] => 0 // B
[17] => 1 // A
[18] => 400 // X4
[19] => 400 // Y4
[20] => 0 // R
[21] => 0 // G
[22] => 1 // B
[23] => 1 // A
)
<?php
$imagick = new imagick();
$imagick->newImage(400,400,"white");
$imagick->setImageFormat("png");
$array = Array(0,0,1,0,0,1,400,0,0,1,0,1,0,400,1,1,0,1,400,400,0,0,1,1);
$imagick->sparseColorImage(imagick::SPARSECOLORMETHOD_BILINEAR,$array);
header("Content-Type: image/png");
echo $imagick->getImageBlob();
?>