PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

【PHP】imagesetpixel()関数で指定座標に単一ピクセルを描画する方法

imagesetpixel()は、PHPのGDライブラリに組み込まれている関数の一つで、指定した座標に単一のピクセルを設定(描画)するために使用されます。

構文

bool imagesetpixel(resource $image, int $x, int $y, int $color)

パラメータ

imagesetpixel()は、$image$x$y$colorの4つの引数を受け取ります。

  • $image − 操作対象の画像リソースを指定します。imagecreatefromjpeg()やimagecreatetruecolor()などで作成したものを使用します。

  • $x − 描画するピクセルのX座標を指定します。

  • $y − 描画するピクセルのY座標を指定します。

  • $color − ピクセルの色を指定します。imagecolorallocate()で事前に作成したカラーIDを使用します。

戻り値

imagesetpixel()は、処理に成功した場合はtrueを、失敗した場合はfalseを返します。

例1:画像に水平線を描画する

<?php
    // imagecreatefromjpeg()関数でJPEG画像を読み込む
    $img = imagecreatefromjpeg('C:\xampp\htdocs\test\29.jpg');

    // imagesetpixel()関数でピクセルを描画する
    $blue = imagecolorallocate($img, 255, 255, 0);
    for ($i = 0; $i < 1000; $i++) {
        imagesetpixel($img, $i, 100, $blue);
    }

    // 出力画像をブラウザに表示する
    header('Content-type: image/png');
    imagepng($img);
?>

このコードでは、読み込んだ画像のY座標100の位置に、黄色(RGB: 255, 255, 0)のピクセルをX方向へ1,000個連続して描画しています。その結果、画像上に水平線が表示されます。

出力結果

【PHP】imagesetpixel()関数で指定座標に単一ピクセルを描画する方法

例2:カオスゲームでシェルピンスキーの三角形を描く

<?php
    $x = 700;
    $y = 300;
    $gd = imagecreatetruecolor($x, $y);
    $corners[0] = array('x' => 100, 'y' => 10);
    $corners[1] = array('x' => 0, 'y' => 170);
    $corners[2] = array('x' => 190, 'y' => 170);
    $blue = imagecolorallocate($gd, 255, 0, 0);

    for ($i = 0; $i < 100000; $i++) {
        imagesetpixel($gd, round($x), round($y), $blue);
        $a = rand(0, 2);
        $x = ($x + $corners[$a]['x']) / 2;
        $y = ($y + $corners[$a]['y']) / 2;
    }

    header('Content-Type: image/png');
    imagepng($gd);
?>

この例は「カオスゲーム」と呼ばれる手法を用いたもので、3つの頂点の中からランダムに1つを選び、現在位置とその頂点の中点を次々とプロットしていきます。これを10万回繰り返すと、有名なフラクタル図形「シェルピンスキーの三角形」が浮かび上がります。単純なピクセル描画の繰り返しだけで複雑な図形が生成できる点は、imagesetpixel()の応用力を示す好例といえるでしょう。

出力結果

【PHP】imagesetpixel()関数で指定座標に単一ピクセルを描画する方法

まとめ

imagesetpixel()は、1ピクセル単位のきめ細かい描画を実現できるシンプルな関数です。ループ処理と組み合わせれば、線分やグラデーション、フラクタル図形など、さまざまな画像をプログラム的に生成できます。GD関数による動的な画像生成を行う際の基本として、ぜひ押さえておきましょう。

  1. PHPのimagecopy()関数とは?画像の一部をコピーする方法を解説

    PHPのimagecopy()関数は、ある画像(ソース画像)の一部を別の画像(コピー先画像)にコピーするために使用されるGDライブラリの関数です。画像の合成やサムネイル作成、ウォーターマークの追加など、さまざまな画像処理に活用できます。 構文 imagecopy( dst_img, src_img, dst_x, dst_y, src_x, src_y, src_w, src_h) パラメータ imagecopy()関数には、以下の8つのパラメータを指定します。 dst_im:コピー先の画像リンクリソースを指定します。 src_im:コピー元の画像リンクリソースを指定します。 dst_x

  2. PHPのimagecopymerge()関数とは?画像のコピーと合成方法を解説

    imagecopymerge()関数とはPHPのimagecopymerge()関数は、ある画像(コピー元)の一部分を別の画像(貼り付け先)にコピーし、指定した透明度で合成(マージ)するためのGDライブラリ関数です。透かし(ウォーターマーク)の追加など、複数の画像を重ね合わせたい場面でよく利用されます。構文imagecopymerge ( dst_img, src_img, dst_x, dst_y, src_x, src_y, src_w, src_h, pct )パラメータdst_img:貼り付け先の画像リンクリソースを設定します。src_img:コピー元の画像リンクリソースを設定します。