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

    (PECL imagick 2.0.0)

    Returns a MagickPixelIterator

    说明

    Imagick::getPixelIterator(void): ImagickPixelIterator

    Returns a MagickPixelIterator.

    返回值

    Returns an ImagickPixelIterator on success.

    错误/异常

    错误时抛出 ImagickException。

    范例

    Example #1 Imagick::getPixelIterator()

    <?php
    function getPixelIterator($imagePath) {
        $imagick = new \Imagick(realpath($imagePath));
        $imageIterator = $imagick->getPixelIterator();
        foreach ($imageIterator as $row => $pixels) { /* Loop through pixel rows */
            foreach ($pixels as $column => $pixel) { /* Loop through the pixels in the row (columns) */
                /** @var $pixel \ImagickPixel */
                if ($column % 2) {
                    $pixel->setColor("rgba(0, 0, 0, 0)"); /* Paint every second pixel black*/
                }
            }
            $imageIterator->syncIterator(); /* Sync the iterator, this is important to do on each iteration */
        }
        header("Content-Type: image/jpg");
        echo $imagick;
    }
    ?>
    
    For me it was very helpful to read a article at Mikko's blog. He showed that the PixelIterator is not read-only, if you sync it regularly:
    <?php
       /* Create new object with the image */
       $im = new Imagick( "strawberry.png" );
       /* Get iterator */
       $it = $im->getPixelIterator();
        
       /* Loop trough pixel rows */
       foreach( $it as $row => $pixels )
       {
         /* For every second row */
         if ( $row % 2 )
         {
           /* Loop trough the pixels in the row (columns) */
           foreach ( $pixels as $column => $pixel )
           {
               /* Paint every second pixel black*/
               if ( $column % 2 )
               {
                   $pixel->setColor( "black" );
               }
           }
         }
         
         /* Sync the iterator, this is important to do on each iteration */
         $it->syncIterator();
       }
        
       /* Display the image */
       header( "Content-Type: image/png" );
       echo $im;
        
    ?>