Php 图像上的可点击网格

Php 图像上的可点击网格,php,gd,Php,Gd,我有一张我正在制作的RPG地图。地图上覆盖了一个网格单元,每个单元50px x 50px。每个单元格都应该是可点击的,但是在800px×800px的映射上有这么多可点击的单元格,我的脚本会用尽分配的内存,不管我将其设置得有多高(上次的尝试是250M)。正如您在下面的代码中看到的,我使用base64编码,然后将图像放入标记中。我相信这可能是问题的一部分,但我不希望用户能够看到地图上的信息。我怎样才能做到这一点并保持在内存限制之下 <?php define("IN_GAME", true);

我有一张我正在制作的RPG地图。地图上覆盖了一个网格单元,每个单元50px x 50px。每个单元格都应该是可点击的,但是在800px×800px的映射上有这么多可点击的单元格,我的脚本会用尽分配的内存,不管我将其设置得有多高(上次的尝试是250M)。正如您在下面的代码中看到的,我使用base64编码,然后将图像放入标记中。我相信这可能是问题的一部分,但我不希望用户能够看到地图上的信息。我怎样才能做到这一点并保持在内存限制之下

<?php

define("IN_GAME", true);
ini_set("memory_limit","500M");

function imagegrid($image, $w, $h, $s, $color)
{
    for($iw = 1; $iw < $w/$s; $iw++)
    {
        imageline($image, $iw*$s, 0, $iw*$s, $w, $color);
    }
    for($ih = 1; $ih < $h/$s; $ih++)
    {
        imageline($image, 0, $ih*$s, $w, $ih*$s, $color);
    }
}

$width = 800;
$height = 800;
$block_size = 50;

$image = "images/maps/world.png";

$img = imagecreatefrompng($image);
$grid = imagecolorallocate($img, 0, 0, 0);

imagesetstyle($img, $grid);
imagegrid($img, $width, $height, $block_size, IMG_COLOR_STYLED);

ob_start();
imagepng($img);
$contents =  ob_get_contents();
ob_end_clean();

$img_STR = "data:image/png;base64,".base64_encode($contents);

imagedestroy($img);

$split = $width/$block_size;
$c = 1;
while($c < $split)
{
    if($c = 1)
    {
        $x1 = $c;
    }
    else
    {
        $x1 = $c*$block_size;
    }

    if($c = 1)
    {
        $y1 = $c;
    }
    else
    {
        $y1 = $c*$block_size;
    }

    $x2 = $x1*$block_size;
    $y2 = $y1*$block_size;

    if(sizeof($coords))
    {
        array_push($coords, $x1);
        array_push($coords, $y1);
        array_push($coords, $x2);
        array_push($coords, $y2);
    }
    else
    {
        echo $x1.','.$x2.','.$y1.','.$y2;
        $coords = array($x1, $y1, $x2, $y2);
    }
}

    if (isset($ts_x) || ($_SERVER['QUERY_STRING'] != ""))
    {
        if (isset($ts_x))
        {
            $clickedX = $ts_x;
            $clickedY = $ts_y;
        }
        else
        {
            list($clickedX, $clickedY) = split(",", $_SERVER['QUERY_STRING'], 2);
        }

        require 'inc.php';
        $allowed = false;

        $allowed = inCoord('circ',$coords, $clickedX, $clickedY);
        if($allowed)
        { 
            ?>
            <html>
                <head>
                    <title>PHP Image Map</title>
                </head>
                <body bgcolor="#00FFC8">
                    <p align="center">
                        <b> Aye Eye you got in!</b>
                        <br>
                        <a href="index.php"> Click Here to Go to main</a>
                    </p>
                </body>
            </html>
            <?php
        }
        else
        {
            //include 'miss_it.inc';
            ?>
            <html>
                <head>
                    <title>PHP Image Map</title>
                </head>
                <body bgcolor="#8BCBF8">
                    <form METHOD="POST" action="">
                        <p align="center">
                            <span style="cursor:default;">
                                <input type="image" src="<?php echo $img_STR; ?>" name="ts">
                            </span>
                        </p>
                    </form>
                </body>
            </html>
            <?php
        }
   }
   else
   { 
        ?>
        <html>
                <head>
                    <title>PHP Image Map</title>
                </head>
                <body bgcolor="#8BCBF8">
                    <form METHOD="POST" action="">
                        <p align="center">
                            <span style="cursor:default;">
                                <input type="image" src="<?php echo $img_STR; ?>" name="ts">
                            </span>
                        </p>
                    </form>
                </body>
            </html>
        <?php
    } 


?>

PHP图像映射

是的,你进去了!

PHP图像映射


您是否尝试过使用html
map
标记,并使用静态图像或在每次加载时创建一个新的800x800图像,然后将其保存在缓冲区、存储在内存和base64中,直到做出更改为止(大小为字符串的两倍),这是非常不可行的。另外,在使用后取消设置一些变量,如
$contents
&
$img
可能会有所帮助,这是我的原始布局,但我希望动态生成可单击区域,以便可以重用代码(只需稍作更改)也适用于区域和区域地图。我只说,我曾经制作了一张evony地图800x800,在静态地图的顶部动态添加了1px插脚,然后使用地图标签将链接放在从数据库中提取的特定插脚上,在clickedwell时有详细的200x200状态,我现在的工作是根据单元格捕捉地图上的点击位置,根据该单元格的单击,将加载下一个区域或区域。我想保留尽可能多的服务器端,以避免可能的作弊。我刚刚发现了旧脚本,如果你想让源代码让我知道,就把它挂起来