PHP 8.5.0 Alpha 1 available for testing

Imagick::sparseColorImage

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

Imagick::sparseColorImageInterpola colores

Descripción

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

Dada la matriz de argumentos que contiene valores númericos, este método interpola los colores encontrados en esas coordenadas a través de la imagen completa usando sparse_method. Este método solo está disponible si Imagick ha sido compilado con ImageMagick versión 6.4.5 o superior.

Parámetros

SPARSE_METHOD

Consulte esta lista de constantes de métodos de escasez

arguments

Una matriz que contiene las coodenadas. El formato de la matriz es array(1,1, 2,45)

channel

Proporciona una constante de canal válida para su modo de canal. Para aplicarlo a más de un canal, combínense las constantes de canales utilizando un operador a nivel de bits. Por omisión, vale Imagick::CHANNEL_DEFAULT. Consúltese la lista de constantes de canales

Valores devueltos

Devuelve true en caso de éxito.

Errores/Excepciones

Lanza una excepción ImagickException si ocurre un error.

Ejemplos

Ejemplo #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();
}

?>

Ejemplo #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();
}

?>

Ejemplo #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();
}

?>

Ejemplo #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();
}

?>

Ejemplo #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();
}

?>

Ejemplo #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
9 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