Imagick::sparseColorImage()
(No version information available, might only be in Git)
Interpolates 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 formatarray(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。
范例
Example #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(); } ?>
Example #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(); } ?>
Example #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(); } ?>
Example #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(); } ?>
Example #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(); } ?>
Example #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; } ?>
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(); ?>