【问题标题】:How do you set a image pixel color in Imagick?你如何在 Imagick 中设置图像像素颜色?
【发布时间】:2012-08-19 11:32:08
【问题描述】:

我正在使用 Imagick 进行图像处理。我找不到任何本机函数来设置特定的像素颜色,而有一个可以得到一个。我的意思是,

$image->getimagepixelcolor($i, $j);

将返回一个对象以获取($i, $j) 处像素的颜色,但似乎没有设置颜色的方法。像这样的,

$image->setimagepixelcolor($i, $j, "#FFFFFF");

【问题讨论】:

  • 也许你可以使用floodFillPaintImage
  • 我的服务器使用了一些过时的 Imagemagick 版本。所以不支持该功能。在旁注中,我认为该功能不能完全满足我的需要。
  • 你有 ImagickDraw 类吗?它具有各种绘图功能。
  • 否则你可以使用GD:php.net/manual/en/book.image.php

标签: php imagemagick imagick


【解决方案1】:

Imagick 类上不会有 setImagePixelColor 方法。我不能说为什么没有,但是可以通过调用ImagickPixelIteratorImagickDraw 类来实现相同的效果。

迭代器示例:

正确的方法是迭代图像中的像素,改变像素颜色,然后将数据同步回图像。

$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);
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-22
    相关资源
    最近更新 更多