Javascript 与html2canvas的混淆
我有一个相当简单的javascript/html代码。我想用“id=mapDiv”保存div,它将地图显示为图像(jpg或png)。我在html文件的根目录中有'jquery-1.11.0.js'和'html2canvas.js'文件。我对HTML/Javascript缺乏经验,无法理解人们以前发布的一些解决方案。任何帮助都将不胜感激。谢谢 这是我的密码:Javascript 与html2canvas的混淆,javascript,html,image,maps,html2canvas,Javascript,Html,Image,Maps,Html2canvas,我有一个相当简单的javascript/html代码。我想用“id=mapDiv”保存div,它将地图显示为图像(jpg或png)。我在html文件的根目录中有'jquery-1.11.0.js'和'html2canvas.js'文件。我对HTML/Javascript缺乏经验,无法理解人们以前发布的一些解决方案。任何帮助都将不胜感激。谢谢 这是我的密码: <html> <head> <title></title> <meta
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript" src="http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=7.0"></script>
<script type="text/javascript">
function GetMap()
{
var lat1 = document.getElementById("lat1").value;
var lon1 = document.getElementById("lon1").value;
var lat2 = document.getElementById("lat2").value;
var lon2 = document.getElementById("lon2").value;
// Initialize the map
var map = new Microsoft.Maps.Map(document.getElementById("mapDiv"),{credentials:"At7RkDItXU6kncQzZa8M9lFfMbzPgmulJYLkhYn5JMMZfHL86lNyFZvGWWngxaAP",
bounds:new Microsoft.Maps.LocationRect.fromCorners(new Microsoft.Maps.Location(lat1, lon1), new Microsoft.Maps.Location(lat2, lon2)),
zoom: 20,
mapTypeId: Microsoft.Maps.MapTypeId.aerial,
disableZooming: true,
showCopyright: false,
showDashboard: false,
enableClickableLogo: false,
});
try
{
// Create the tile layer source
var tileSource = new Microsoft.Maps.TileSource({uriConstructor: 'http://www.microsoft.com/maps/isdk/ajax/layers/lidar/{quadkey}.png'});
// Construct the layer using the tile source
var tilelayer= new Microsoft.Maps.TileLayer({ mercator: tileSource, opacity: .7 });
// Push the tile layer to the map
map.entities.push(tilelayer);
// Disable mouse click and pan map
Microsoft.Maps.Events.addHandler(map, 'mousedown', function (mouseEvent) {
mouseEvent.handled = true;
});
// Calculating distance between two points
function toRad(Value) {
return Value * Math.PI / 180;}
// Calculate vertical distance
var vR = 6371; // km
var vdLat = toRad(lat2-lat1);
var vdLon = toRad(lon1-lon1);
var vrlat1 = toRad(lat1);
var vrlat2 = toRad(lat2);
var va = Math.sin(vdLat/2) * Math.sin(vdLat/2) +
Math.sin(vdLon/2) * Math.sin(vdLon/2) * Math.cos(vrlat1) * Math.cos(vrlat2);
var vc = 2 * Math.atan2(Math.sqrt(va), Math.sqrt(1-va));
var vd = vR * vc;
//Calculate horizontal distance
var hR = 6371; // km
var hdLat = toRad(lat1-lat1);
var hdLon = toRad(lon2-lon1);
var hrlat1 = toRad(lat1);
var hrlat2 = toRad(lat1);
var ha = Math.sin(hdLat/2) * Math.sin(hdLat/2) +
Math.sin(hdLon/2) * Math.sin(hdLon/2) * Math.cos(hrlat1) * Math.cos(hrlat2);
var hc = 2 * Math.atan2(Math.sqrt(ha), Math.sqrt(1-ha));
var hd = hR * hc;
alert(' Horizontal Distance = ' + hd + '\n Vertical Distance = ' + vd);
}
catch(err)
{
alert( 'Error Message:' + err.message);
}
}
</script>
<script type="text/javascript" src="html2canvas.js"></script>
<script type="text/javascript" src="jquery-1.11.0.js"></script>
<script type="text/javascript">
$(document).ready(function() {
var target = $('div');
html2canvas(target, {
onrendered: function(canvas) {
var data = canvas.toDataURL();
var myImage = canvas.toDataURL("image\png");
window.open(myImage);
//alert(data);
//data is the Base64-encoded image
}
});
});
</script>
</head>
<body onload="GetMap();">
<body bgcolor="#9FB6CD">
<center>
<h1>Enter Coordinates</h1>
</br>
<h3>Input points</h3>
Coordinate1 (upper-left):
</br>
latitude 1: <input type="text" id="lat1" value="55"><br>
Longitude 1: <input type="text" id="lon1" value="135"><br>
Coordinate 2 (lower-right):
</br>
latitude 2: <input type="text" id="lat2" value="54.98"><br>
Longitude 2: <input type="text" id="lon2"value="135.02"><br>
<input type="submit" value="submit" onclick="GetMap()">
<div id='mapDiv' typename="mapDiv" style="position:relative; width:500px; height:500px;"></div>
<script>
$('#mapDiv div.mapDiv').trigger($.event('click'));
</script>
</center>
</body>
</html>
函数GetMap()
{
var lat1=document.getElementById(“lat1”).value;
var lon1=document.getElementById(“lon1”).value;
var lat2=document.getElementById(“lat2”).value;
var lon2=document.getElementById(“lon2”).value;
//初始化映射
var map=new Microsoft.Maps.map(document.getElementById(“mapDiv”),{凭证:“at7rkditxu6kncqzza8m9lffmbzpgmuljylkhyn5jmmzffl86lnyfzvgwngxaap”,
边界:新建Microsoft.Maps.LocationRect.fromCorners(新建Microsoft.Maps.Location(lat1,lon1),新建Microsoft.Maps.Location(lat2,lon2)),
缩放:20,
mapTypeId:Microsoft.Maps.mapTypeId.Aeror,
禁用缩放:对,
版权所有:假,
showDashboard:false,
enableClickableLogo:false,
});
尝试
{
//创建平铺层源
var tileSource=new Microsoft.Maps.tileSource({uriConstructor:'http://www.microsoft.com/maps/isdk/ajax/layers/lidar/{quadkey}.png'});
//使用平铺源构建层
var tilelayer=new Microsoft.Maps.tilelayer({mercator:tileSource,不透明度:.7});
//将平铺层推送到地图上
map.entities.push(tilelayer);
//禁用鼠标单击和平移贴图
Microsoft.Maps.Events.addHandler(映射'mousedown',函数(mouseEvent){
mouseEvent.handled=true;
});
//计算两点之间的距离
函数toRad(值){
返回值*Math.PI/180;}
//计算垂直距离
var vR=6371;//公里
var vdLat=toRad(lat2-lat1);
var vdLon=toRad(lon1-lon1);
var vrlat1=toRad(lat1);
var vrlat2=toRad(lat2);
var va=数学sin(vdLat/2)*数学sin(vdLat/2)+
数学sin(vdLon/2)*数学sin(vdLon/2)*数学cos(vrlat1)*数学cos(vrlat2);
var vc=2*Math.atan2(Math.sqrt(va),Math.sqrt(1-va));
var vd=vR*vc;
//计算水平距离
var hR=6371;//km
var hdLat=toRad(lat1-lat1);
var hdLon=toRad(lon2-lon1);
var hrlat1=toRad(lat1);
var hrlat2=toRad(lat1);
var ha=数学sin(hdLat/2)*数学sin(hdLat/2)+
数学sin(hdLon/2)*数学sin(hdLon/2)*数学cos(hrlat1)*数学cos(hrlat2);
var hc=2*Math.atan2(Math.sqrt(ha),Math.sqrt(1-ha));
var hd=hR*hc;
警报(‘水平距离=’+hd+’\n垂直距离=’+vd);
}
捕捉(错误)
{
警报(“错误消息:”+错误消息);
}
}
$(文档).ready(函数(){
var目标=$('div');
html2canvas(目标{
onrendered:函数(画布){
var data=canvas.toDataURL();
var myImage=canvas.toDataURL(“image\png”);
窗口打开(myImage);
//警报(数据);
//数据是Base64编码的图像
}
});
});
输入坐标
输入点
坐标1(左上角):
纬度1:
经度1:
坐标2(右下角):
纬度2:
经度2:
$('#mapDiv div.mapDiv')。触发器($.event('click'));
如果您想将图像从画布保存为某种图像格式,这里有一些帮助。希望这能帮到你
$(document).ready(function() {
html2canvas(document.getElementById('mapDiv'), {
onrendered: function(canvas) {
var cs = new CanvasSaver('save_img.php',canvas,'myimage')
}
});
});
下面是CanvasSaver()函数的定义,它有三个参数:一个是php文件,它将图像从原始日期处理为某种图像格式。我将在这个脚本部分编写“save_img.php”代码,并将该文件保存在根目录中
function CanvasSaver(url, cnvs, fname) {
this.url = url;
if(!cnvs || !url) return;
fname = fname || 'picture';
var data = cnvs.toDataURL("image/png");
data = data.substr(data.indexOf(',') + 1).toString();
var dataInput = document.createElement("input") ;
dataInput.setAttribute("name", 'imgdata') ;
dataInput.setAttribute("value", data);
dataInput.setAttribute("type", "hidden");
var nameInput = document.createElement("input") ;
nameInput.setAttribute("name", 'name') ;
nameInput.setAttribute("value", fname + '.jpg');
var myForm = document.createElement("form");
myForm.method = 'post';
myForm.action = url;
myForm.appendChild(dataInput);
myForm.appendChild(nameInput);
document.body.appendChild(myForm) ;
myForm.submit() ;
document.body.removeChild(myForm) ;
}
<?php
# we are a PNG image
header('Content-type: image/png');
# we are an attachment (eg download), and we have a name
header('Content-Disposition: attachment; filename="' . $_POST['name'] .'"');
#capture, replace any spaces w/ plusses, and decode
$encoded = $_POST['imgdata'];
$encoded = str_replace(' ', '+', $encoded);
$decoded = base64_decode($encoded);
#write decoded data
echo $decoded;
?>
在上面的脚本中,无论您想从浏览器中保存什么图像格式,请在上面的脚本函数中指定该图像扩展名
nameInput.setAttribute("value", fname + '.jpg');
下面是“save_img.php”的代码,并将其保存在根目录中
function CanvasSaver(url, cnvs, fname) {
this.url = url;
if(!cnvs || !url) return;
fname = fname || 'picture';
var data = cnvs.toDataURL("image/png");
data = data.substr(data.indexOf(',') + 1).toString();
var dataInput = document.createElement("input") ;
dataInput.setAttribute("name", 'imgdata') ;
dataInput.setAttribute("value", data);
dataInput.setAttribute("type", "hidden");
var nameInput = document.createElement("input") ;
nameInput.setAttribute("name", 'name') ;
nameInput.setAttribute("value", fname + '.jpg');
var myForm = document.createElement("form");
myForm.method = 'post';
myForm.action = url;
myForm.appendChild(dataInput);
myForm.appendChild(nameInput);
document.body.appendChild(myForm) ;
myForm.submit() ;
document.body.removeChild(myForm) ;
}
<?php
# we are a PNG image
header('Content-type: image/png');
# we are an attachment (eg download), and we have a name
header('Content-Disposition: attachment; filename="' . $_POST['name'] .'"');
#capture, replace any spaces w/ plusses, and decode
$encoded = $_POST['imgdata'];
$encoded = str_replace(' ', '+', $encoded);
$decoded = base64_decode($encoded);
#write decoded data
echo $decoded;
?>