Category
Example

### Imagick::sparseColorImage

Given the arguments array containing numeric values this method interpolates the colors found at those coordinates across the whole image using sparse_method. This method is available if Imagick has been compiled against ImageMagick version 6.4.5 or newer.

Fill an image with color with the defined sparse color method.

Barycentric - Maps three colors onto a linear triangle of color. The colors outside this triangle continue as before. This method is useful for creating smooth gradients of color.

Bilinear - This method fits an equation to 4 points, over all three color channels to produce a uniform color gradient between the points, and beyond.

Shepards - The "Shepards" method uses a ratio of the inverse squares of the distances to each of the given points to determine the color of the canvas at each point.

Voronoi - Maps each pixel in the image to the color of the closest point point provided. This basically divides the image into a set of polygonal 'cells' around each point.

http://www.imagemagick.org/Usage/canvas/#sparse-color

### Example 1 - SPARSECOLORMETHOD_BARYCENTRIC

public function renderImageBarycentric2()
{
\$points = [
[0.30, 0.10, 'red'],
[0.10, 0.80, 'blue'],
[0.70, 0.60, 'lime'],
[0.80, 0.20, 'yellow'],
];
400, 400,
\$points,
\Imagick::SPARSECOLORMETHOD_BARYCENTRIC
);
echo \$imagick->getImageBlob();
}

### Example 2 - SPARSECOLORMETHOD_BILINEAR

public 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);
echo \$imagick->getImageBlob();
}

### Example 3 - SPARSECOLORMETHOD_SPEPARDS

public 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);
echo \$imagick->getImageBlob();
}

### Example 4 - SPARSECOLORMETHOD_VORONOI

public 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);
echo \$imagick->getImageBlob();
}

### Example 5 - SPARSECOLORMETHOD_BARYCENTRIC

public function renderImageBarycentric()
{
\$points = [
[0, 0, 'skyblue'],
[-1, 1, 'skyblue'],
[1, 1, 'black'],
];
\$imagick = createGradientImage(600, 200, \$points, \Imagick::SPARSECOLORMETHOD_BARYCENTRIC);
echo \$imagick->getImageBlob();
}

### Example 6 - createGradientImage is used by other examples.

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;
// TODO - document this as a change on IM7
//\$barycentricPoints[] = \$alpha;
}

\$imagick->sparseColorImage(\$sparseMethod, \$barycentricPoints);

return \$imagick;
}