Php 图像上的可点击网格
我有一张我正在制作的RPG地图。地图上覆盖了一个网格单元,每个单元50px x 50px。每个单元格都应该是可点击的,但是在800px×800px的映射上有这么多可点击的单元格,我的脚本会用尽分配的内存,不管我将其设置得有多高(上次的尝试是250M)。正如您在下面的代码中看到的,我使用base64编码,然后将图像放入标记中。我相信这可能是问题的一部分,但我不希望用户能够看到地图上的信息。我怎样才能做到这一点并保持在内存限制之下Php 图像上的可点击网格,php,gd,Php,Gd,我有一张我正在制作的RPG地图。地图上覆盖了一个网格单元,每个单元50px x 50px。每个单元格都应该是可点击的,但是在800px×800px的映射上有这么多可点击的单元格,我的脚本会用尽分配的内存,不管我将其设置得有多高(上次的尝试是250M)。正如您在下面的代码中看到的,我使用base64编码,然后将图像放入标记中。我相信这可能是问题的一部分,但我不希望用户能够看到地图上的信息。我怎样才能做到这一点并保持在内存限制之下 <?php define("IN_GAME", true);
<?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图像映射
您是否尝试过使用htmlmap
标记,并使用静态图像或在每次加载时创建一个新的800x800图像,然后将其保存在缓冲区、存储在内存和base64中,直到做出更改为止(大小为字符串的两倍),这是非常不可行的。另外,在使用后取消设置一些变量,如$contents
&$img
可能会有所帮助,这是我的原始布局,但我希望动态生成可单击区域,以便可以重用代码(只需稍作更改)也适用于区域和区域地图。我只说,我曾经制作了一张evony地图800x800,在静态地图的顶部动态添加了1px插脚,然后使用地图标签将链接放在从数据库中提取的特定插脚上,在clickedwell时有详细的200x200状态,我现在的工作是根据单元格捕捉地图上的点击位置,根据该单元格的单击,将加载下一个区域或区域。我想保留尽可能多的服务器端,以避免可能的作弊。我刚刚发现了旧脚本,如果你想让源代码让我知道,就把它挂起来