是否可以同时使用图像映射并缓存图表? 启用缓存时,不再创建图像映射。 我需要有图像映射,以便在鼠标悬停时显示该值,但我希望能够缓存图表以显着减少我的CPU负载。 我无法在任何地方找到关于此的信息,而且pChart论坛很乱。
答案 0 :(得分:0)
使用当前版本(2.1.3),这是不可能的。仅当pChart实际绘制图像时才创建图像映射,即稍后当您从缓存中抓取图像时,图像映射不可用。
要解决此问题,您可以自行缓存图像映射。关于http://wiki.pchart.net/doc.imagemaps.fundamentals.html上的例子你可以沿着这些方向做点什么
//initialise the map
$myPicture->initialiseImageMap("ImageMapBarChart", IMAGE_MAP_STORAGE_FILE, "BarChart", "../tmp");
//draw the chart
$Settings = array("RecordImageMap" => TRUE);
$myPicture->drawBarChart($Settings);
//the image map is ready for you here
//so before you output the chart get the map with dumpImageMap() and copy it to YOUR OWN CACHE
$myPicture->dumpImageMap("ImageMapBarChart", IMAGE_MAP_STORAGE_FILE, "BarChart", "../tmp");
我知道这是一个老问题,但我希望这会有所帮助。
答案 1 :(得分:0)
我能够使用以下代码使其工作。我为论坛的格式,限制道歉。我还必须修改pImage.class以不删除tmp文件,因此它们被保存用于缓存图像。
if ( $myCache->isInCache($ChartHash)) {
/* Retrieve the image map */
if (isset($_GET["ImageMap"]) || isset($_POST["ImageMap"])) {
$StorageFolder = PCHART_PATH . "/cache/imageMap";
$UniqueID = "AreaChart".$ChartHash;
if (file_exists($StorageFolder."/".$UniqueID.".map")) {
$Handle = @fopen($StorageFolder."/".$UniqueID.".map", "r");
if ($Handle) { while (($Buffer = fgets($Handle, 4096)) !== false) { echo $Buffer; } }
fclose($Handle);
}
}
/* Output cached image */
$myCache->strokeFromCache($ChartHash,"pictures/drawAreaChart.".$ChartHash.".png");
}