我在从 .tmx(平铺)文件中提取图层内容时遇到问题。我想在 PHP 中获得完整的未压缩数据并制作一个小图像。获取宽度、高度等标题信息是没有问题的——SimpleXML 在那里完成了它的工作。但不知何故,瓦片层的解压缩不起作用。
数据本身存储为base64和gzip编码的字符串(类似H4sIAAAAAAAAC+3bORKAIBQEUVzuf2YTTSwEA/gL00EnJvJQsAjcSyk7EU3v+Jn3OI
),但我什至在获取base64解码代码时遇到问题(它只是给了我奇怪的字符,当我重新打开平铺地图并将其保存为“base64 uncompressed”结果只是一个空字符串 -当然不使用 gzip 解压缩)。
我已经通过网络搜索并查看了数据是如何精确压缩的(Github 文章)。似乎我必须使用该gzinflate()
命令而不是所有其他命令(例如 gzuncompress),但这对我也不起作用。
我现在拥有的代码如下:
<?php
// Get the raw xml data
$map_xml = new SimpleXML(file_get_contents("map.tmx"));
$data = $map_xml["layer"][0]["data"]["@content"]; // I would make a loop here
$content =gzinflate(base64_decode($map_content)); // gives me and error
var_dump($data); // results in nothing
?>
经过更多研究后,我发现我应该使用 zlib 过滤器(php.net 文章)。现在我真的很困惑,我不知道我应该选择什么 - 我再次询问谷歌并得到以下信息:Compressing with Java Decompressing with PHP。根据答案,我必须在使用 base64 和 gzip 方法之前裁剪我们的标题。
现在我的问题是:我必须先剪掉标题吗?如果是,我该怎么做?如果没有,那我怎样才能得到未压缩的数据呢?
我真的希望有人可以在这里帮助我!