CakeFest 2024: The Official CakePHP Conference

Imagick::sparseColorImage

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

Imagick::sparseColorImageInterpolates colors

Açıklama

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. Bu yöntem, derleme sırasında ImageMagick kütüphanesinin 6.4.5 veya sonraki bir sürümü kuruluysa kullanılabilir.

Bağımsız Değişkenler

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

Normalde kanal türü sabitlerinden biridir, ancak bitsel işleçler kullanılarak birden fazla kanal belirtilebilir. Imagick::CHANNEL_DEFAULT öntanımlıdır.

Dönen Değerler

Başarı durumunda true döner.

Hatalar/İstisnalar

Hata durumunda bir ImagickException istisnası oluşur.

Örnekler

Örnek 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();
}

?>

Örnek 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();
}

?>

Örnek 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();
}

?>

Örnek 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();
}

?>

Örnek 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();
}

?>

Örnek 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
7 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