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

    (PECL imagick 2.0.0)

    Returns the color

    说明

    ImagickPixel::getColor([int $normalized= 0]): array

    Returns the color described by the ImagickPixel object, as an array. If the color has an opacity channel set, this is provided as a fourth value in the list.

    参数

    $normalized

    Normalize the color values

    返回值

    An array of channel values, each normalized if TRUE is given as param. Throws ImagickPixelException on error.

    范例

    Example #1 Basic Imagick::getColor() usage

    <?php
    //Create an ImagickPixel with the predefined color 'brown'
    $color = new ImagickPixel('brown');
    //Set the color to have an alpha of 25%
    $color->setColorValue(Imagick::COLOR_ALPHA, 64 / 256.0);
    $colorInfo = $color->getColor();
    echo "Standard values".PHP_EOL;
    print_r($colorInfo);
    $colorInfo = $color->getColor(true);
    echo "Normalized values:".PHP_EOL;
    print_r($colorInfo);
    ?>
    

    以上例程会输出:

    Standard values
    Array
    (
        [r] => 165
        [g] => 42
        [b] => 42
        [a] => 0
    )
    Normalized values:
    Array
    (
        [r] => 0.64705882352941
        [g] => 0.16470588235294
        [b] => 0.16470588235294
        [a] => 0.25000381475547
    )
        
    In case you use default un-normalized getColor value the alpha value will always be either 0 or 1.
    If you want to use real full-range 0-1 alpha channel on your 24bit transparent images use the alpha value from the normalized one, even if you use the rest of unnormalized data.
    To copy a 24bit png with real alpha transparency, you would have to do this:
    <?php
    $im=new Imagick( 'image.png' );
    $iterator=$im->getPixelIterator();
    foreach ($iterator as $row=>$pixels) {
      foreach ( $pixels as $column => $pixel ){
        $un_color=$pixel->getColor(); //unnormalized color
        $nor_color=$pixel->getColor(true); //normalized color
        $pixel->setColor('rgba('.$un_color['r'].','.$un_color['g'].','.$un_color['b'].','.$nor_color['a'].')');
      }
    }
    ?>
    If you use 'a' (alpha) value from the unnormalized color there will only be binary transparency.