Dutch PHP Conference 2025 - Call For Papers

Imagick::sparseColorImage

(PECL imagick 2 >= 2.3.0, PECL imagick 3)

Imagick::sparseColorImageInterpolates colors

Опис

public Imagick::sparseColorImage(int $SPARSE_METHOD, array $arguments, int $channel = Imagick::CHANNEL_DEFAULT): bool

Given the arguments array containing numeric values this method interpolates the colors found at those coordinates across the whole image using sparse_method. Цей метод доступний, якщо Imagick зібраний з ImageMagick версії 6.4.5 або новішою.

Параметри

SPARSE_METHOD

Refer to this list of sparse method constants

arguments

An array containing the coordinates. The array is in format 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;
}

?>

add a note

User Contributed Notes 1 note

up
3
aehtyb[]gmail.com
8 years ago
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();

?>
To Top