ホームページ >php教程 >php手册 >Imagick と Gmagick のピクセル反復関数の比較

Imagick と Gmagick のピクセル反復関数の比較

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-06-21 08:52:171256ブラウズ

通常、画像処理タスクはサムネイルやウォーターマークなどの単純なタスクですが、ピクセル反復などのより複雑なタスクになる場合もあります。この記事では、例を使用して Imagick と Gmagick のピクセル反復関数を比較します。

ピクセルデータ生成コード

$data = array();

for ($row = 0; $row <100; $row++) {

for ($column = 0; $column < 100; $column++) {

$data[$row][$column] = '#' . str_repeat($column % 10, 6);

}

}

?>

Imagick はピクセルを繰り返し書き込みます

'data.php' が必要です;

$image = new Imagick();

$image->newimage(100, 100, 'white', 'png');

$iterator = $image->getPixelIterator();

foreach ($iterator as $row => $pixels) {

foreach ($pixels as $column => $pixel) {

$pixel->setColor($data[$row][$column]);

}

$iterator->syncIterator();

}

$image->writeimage('pixel.png');

?>

注: PixelIterator を使用して Imagick にピクセルを書き込む場合は、syncIterator オペレーションを呼び出す必要があります (ピクセルの読み取り時には使用されません)。

Gmagick はピクセルを繰り返し書き込みます

'data.php' が必要です;

$image = new Gmagick();

$image->newimage(100, 100, 'white', 'png');

$pixel = new GmagickPixel();

$draw = new GmagickDraw();

for ($row = 0; $row <100; $row++) {

for ($column = 0; $column < 100; $column++) {

$pixel->setcolor($data[$row][$column]);

$draw->setfillcolor($pixel);

$draw->point($column, $row);

$image->drawimage($draw);

$pixel->clear();

$draw->clear();

}

}

$image->writeimage('pixel.png');

?>

生成された画像は次のとおりです:

ピクセル.png

以前に、反復中にピクセルを書き込む方法を説明しました。次に、ピクセルを読み取る方法を見てみましょう (生成されたPixel.pngを使用):

Imagick はピクセルを繰り返し読み取ります

$data = array();

$image = new Imagick('pixel.png');

$iterator = $image->getpixeliterator();

foreach ($iterator as $row => $pixels) {

foreach ($pixels as $column => $pixel) {

$data[$row][$column] = $pixel->getColor();

}

}

print_r($data);

?>

 

  Gmagick迭代读像素

$data = array();

$image = new Gmagick('pixel.png');

$width = $image->getImageWidth();

$height = $image->getImageHeight();

for ($row = 0; $row < $width; $row++) {

for ($column = 0; $column < $height; $column++) {

$cropped = clone $image;

$histogram = $cropped->cropImage(1, 1, $column, $row)

->quantizeImage(1, Gmagick::COLORSPACE_RGB, 0, false, false)

->getImageHistogram();

$data[$row][$column] = $histogram[0]->getColor();

}

}

print_r($data);

?>

  注: Imagick と Gmagick で取得される色は両方とも RGB 形式ですが、データ形式が異なります。

  全体的に見ると、Imagick の実装はより単純なものですが、Gmagick の実装は PixelIterator の概念がないためバグではなく、GraphicsMagick Wand C API インターフェイスとの一貫性を保つためのものです。 >



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。