0

私がここで立ち往生しているので、誰かがこれを手伝ってくれるかもしれません。だから私は560x225サイズのzem.png画像を持っています。透明な背景があります。x、y から x1、x2 までの線を gd ライブラリで描画する必要があります (5 ~ 7 本の線を描画する必要がありますが、1 本の線を描画する方法の簡単な例があれば完璧です)。

透明な画像を作成する方法は次のとおりです。

// Kuriame paveiksleli pasinaudodami GD library keliams tarp miestu pavaizduoti
$im = imagecreatetruecolor(560, 225);
$red = imagecolorallocate($im, 255, 0, 0);
$black = imagecolorallocate($im, 0, 0, 0);

// Make the background transparent
imagecolortransparent($im, $black);

// Issaugome paveiksleli
imagepng($im, './zem.png');
imagedestroy($im);

この画像を作成した後、テーブルまたは div の背景画像として使用しています。私のテーブル ir div は、x - 35 ブロック、y 25 のブロックに分割されています。

他の画像を配置する 4 つのポイントまたは 4 つのブロックを選択しました。これらのランダム ブロックを生成する方法は次のとおりです。

$x = rand(1, 35);
$y = rand(1, 25);
$x2 = rand(1, 35);
$y2 = rand(1, 25);
$x3 = rand(1, 35);
$y3 = rand(1, 25);
$x4 = rand(1, 35);
$y4 = rand(1, 25);

単一ブロックのサイズは 16x9 です。そして、生成されたすべてのブロックから他のブロックに線を引く必要があるため (都市からの道路を表すため)、線の正確な座標を知るために、x (x2,x3..) を 16 倍し、y を 9 倍する必要があります。始点と終点。だから私はこれをやっています:

// Breziame kelius
$kordinate = $x * 16;
$kordinate2 = $y * 9;
$kordinate3 = $x2 * 16;
$kordinate4 = $y2 * 9;

オーケー、これで 1 行の座標が得られました。そして、私が立ち往生している場所があります。私は多くの例を試しました。しかし、php gdライブラリを使用して線を引くことはまだできません。だから多分誰かが何かを提案できますか?画像作成コードに何かを追加するか、単にそれを削除して空白の透明な画像を残して開いてから線を引くには...

4

1 に答える 1

1

テーブルや地図画像を作るときは、必ずクラスと関数を用意します。それが役立つかどうかはわかりませんが、これが私のサンプル コードです。このファイルに GridTb.php という名前を付けて実行するだけです。

 <?php
header('Content-type: image/png');
$GridTb = new GridTb();
$GridTb->pngfile(330, 700);

class GridTb {

    function pngfile($width, $height) {

        define("WIDTH", $width);
        define("HEIGHT",$height);


        $png_image = imagecreate(WIDTH, HEIGHT);

        imagecolorallocate($png_image, 255, 255, 255);
        imagesetthickness($png_image, 1);
        $black = imagecolorallocate($png_image, 0, 0, 0);

        $x = 0;
        $y = 0;
        $w = imagesx($png_image) - 1;
        $z = imagesy($png_image) - 1;
        //basic square frame
        imageline($png_image, $x, $y, $x, $y + $z, $black);
        imageline($png_image, $x, $y, $x + $w, $y, $black);
        imageline($png_image, $x + $w, $y, $x + $w, $y + $z, $black);
        imagerectangle($png_image, $x, $y + $z, $x + $w, $y + $z, $black);

        $wid = 30;
        // $h=40;
        for ($row = 0; $row < 10; $row++) {

            imageline($png_image, $wid, HEIGHT, $wid, 0, $black);
            $wid+=30;
            imageline($png_image, $wid, HEIGHT, $wid, 0, $black);

            for ($h = 40; $h < 701; $h++) {

                $h2 = array(60,200,150,150,100);
                imageline($png_image, WIDTH, $h, 0, $h, $black);
                $h+=60;
                imageline($png_image, WIDTH, $h, 0, $h, $black);
                $h+=200;
                imageline($png_image, WIDTH, $h, 0, $h, $black);
                $h+=150;
                imageline($png_image, WIDTH, $h, 0, $h, $black);
                $h+=150;
                imageline($png_image, WIDTH, $h, 0, $h, $black);
                $h+=100;
                imageline($png_image, WIDTH, $h, 0, $h, $black);
                //sum of $h = 700
            }
        }
        imagepng($png_image);
        imagedestroy($png_image);
    }

}

?>
<IMG src="GridTb.php">
于 2014-05-02T02:11:30.880 に答える