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; ?>