• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • Imagick::getImagePixelColor()

    (PECL imagick 2.0.0)

    Returns the color of the specified pixel

    说明

    Imagick::getImagePixelColor(int $x,int $y): ImagickPixel

    Returns the color of the specified pixel.

    参数

    $x

    The x-coordinate of the pixel

    $y

    The y-coordinate of the pixel

    返回值

    Returns an ImagickPixel instance for the color at the coordinates given.

    错误/异常

    错误时抛出 ImagickException。

    I'm sure there are a lot of people like me who have been wondering, "How you manage to produce a human readable output of this operation?"
    <?php
    $image = new Imagick('testimage.jpg');
    $x = 1; 
    $y = 1;
    $pixel = $image->getImagePixelColor($x, $y);
    ?>
    If you try to print an output of the $pixel object, you get nothing. You have to use one of the ImagickPixel operations to get back a value.
    You can do either of the following:
    <?php
    $colors = $pixel->getColor();
    print_r($colors); // produces Array([r]=>255,[g]=>255,[b]=>255,[a]=>1);
    $pixel->getColorAsString(); // produces rgb(255,255,255);
    ?>
    The place where I was getting hung up was how to get the data that was captured in the Imagick::getImagePixelColor operation into an ImagickPixel object. I was trying to find ways of passing the value to a newly instantiated ImagickPixel object. Well, it appears that once you've captured your color data using Imagick::getImagePixelColor, what's returned IS an ImagickPixel object!
    As a further note, you do not need to convert this to a human readable format if you just want to take a color sample at a single point on your image to plug into another operation. 
    For example, if you wanted to perform a flood fill effect on a certain color you could plug in the instance of the ImagickPixel object directly. 
    The following fill perform a flood fill effect at coordinates 1,1 on your image using Green as the fill color and the color sampled at 1,1 as the target color to fill.
    <?php
    $hexcolor = '#00ff00';
    $fuzz = '4000';
    $x = 1;
    $y = 1;
    $pixel = $image->getImagePixelColor($x, $y);
    $image->floodfillPaintImage($hexcolor, $fuzz, $pixel, $x, $y, false);
    ?>