我正在使用 Imagick 进行图像处理。我找不到任何本机函数来设置特定的像素颜色,而有一个可以得到一个。我是说,
$image->getimagepixelcolor($i, $j);
将返回一个对象以获取像素的颜色,($i, $j)
但似乎没有设置颜色的方法。像这样的东西,
$image->setimagepixelcolor($i, $j, "#FFFFFF");
我正在使用 Imagick 进行图像处理。我找不到任何本机函数来设置特定的像素颜色,而有一个可以得到一个。我是说,
$image->getimagepixelcolor($i, $j);
将返回一个对象以获取像素的颜色,($i, $j)
但似乎没有设置颜色的方法。像这样的东西,
$image->setimagepixelcolor($i, $j, "#FFFFFF");
类上没有setImagePixelColor
方法Imagick
。我不能说为什么没有,但是可以通过调用ImagickPixelIterator或ImagickDraw类来实现相同的效果。
迭代器示例:
正确的方法是迭代图像中的像素,改变像素颜色,然后将数据同步回图像。
$image = new Imagick('source.png');
// Grab iterator
$iterator = $image->getPixelIterator();
// Seek to row at Y
$iterator->setIteratorRow($j);
// Get pixel in row
$row = $iterator->getCurrentIteratorRow();
// Seek to pixel at X
$pixel = $row[$i];
// Set Color
$pixel->setColor('#FFFFFF');
// Sync data back to image
$iterator->syncIterator();
$image->writeImage('out.png');
绘制示例:
另一种选择是在现有图像之上绘制新像素。
$image = new Imagick('source.png');
$draw = new ImagickDraw();
$color = new ImagickPixel('#FFFFFF');
// Set fill color
$draw->setFillColor($color);
// Draw a point at X,Y
$draw->point($i,$j);
// Apply the drawing on top of the image
$image->drawImage($draw);
$image->writeImage('dest.png');
当然使用 PHP 中的 Object,您可以简单地扩展核心 Imagick 对象,并创建自己的setImagePixelColor
方法
class MyImagick extends Imagick
{
/**
* Alter image by defining the color of a single pixel
*
* @param integer $x
* @param integer $y
* @param string $color
*/
public function setImagePixelColor($x,$y, $color)
{
//... Apply one of the methods here
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel($color));
$draw->point($x,$y);
$this->drawImage($draw);
}
}