Imagick::sparseColorImage
(PECL imagick 2 >= 2.3.0, PECL imagick 3)
Imagick::sparseColorImage — Interpolates colors
说明
$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- 
      
Provide any channel constant that is valid for your channel mode. To apply to more than one channel, combine channel constants using bitwise operators. 缺省为
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;
}
?>用户贡献的备注 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();
?>备份地址:http://www.lvesu.com/blog/php/imagick.sparsecolorimage.php