Imagick::getPixelIterator

(PECL imagick 2, PECL imagick 3)

Imagick::getPixelIterator返回一个 MagickPixelIterator

描述

public Imagick::getPixelIterator(): ImagickPixelIterator

返回一个 MagickPixelIterator。

参数

此函数没有参数。

返回值

成功时返回一个 ImagickPixelIterator。

错误/异常

错误时抛出 ImagickException。

示例

示例 #1 Imagick::getPixelIterator()

<?php
function getPixelIterator($imagePath) {
$imagick = new \Imagick(realpath($imagePath));
$imageIterator = $imagick->getPixelIterator();

foreach (
$imageIterator as $row => $pixels) { /* 循环遍历像素行 */
foreach ($pixels as $column => $pixel) { /* 循环遍历行中的像素(列) */
/** @var $pixel \ImagickPixel */
if ($column % 2) {
$pixel->setColor("rgba(0, 0, 0, 0)"); /* 将每隔一个像素涂成黑色 */
}
}
$imageIterator->syncIterator(); /* 同步迭代器,这在每次迭代中都非常重要 */
}

header("Content-Type: image/jpg");
echo
$imagick;
}

?>

添加注释

用户贡献的注释 1 个注释

Sebastian Herold
16 年前
对我来说,在 Mikko 的博客上阅读一篇文章非常有帮助。他表明,如果您定期同步 PixelIterator,它不是只读的

<?php
/* 使用图像创建新对象 */
$im = new Imagick( "strawberry.png" );

/* 获取迭代器 */
$it = $im->getPixelIterator();

/* 循环遍历像素行 */
foreach( $it as $row => $pixels )
{
/* 对于每隔一行 */
if ( $row % 2 )
{
/* 循环遍历行中的像素(列) */
foreach ( $pixels as $column => $pixel )
{
/* 将每隔一个像素涂成黑色 */
if ( $column % 2 )
{
$pixel->setColor( "black" );
}
}

}

/* 同步迭代器,这在每次迭代中都非常重要 */
$it->syncIterator();
}

/* 显示图像 */
header( "Content-Type: image/png" );
echo
$im;

?>
To Top