将图像对象从我的网页保存到文件

时间:2016-09-22 22:34:49

标签: javascript asp.net vb.net

我正在使用VB和ASP。我有一个ASP图像控件,其中包含一个图像,在这种情况下,它是从Google地图引入的静态地图。我想用VB代码将图像下载到图像(bmp,jpg或任何东西)。该图像位于客户端的asp:Image对象中。只需要使用服务器端的代码下载映像。如果有必要,我可以在客户端使用JS来执行此操作。在那种情况下,我仍然想知道是否有人知道如何做到这一点。

这是我的javascript代码,用于将页面上显示的地图加载到asp:image对象。这部分效果很好。只需将图像保存为文件即可。此功能正在使用的页面上的先前代码中有预定义变量,包括“地图”,“地图选项”,“边界”和“标记”

function Export() {
    map = new google.maps.Map(document.getElementById("dvMap"), mapOptions);

    //URL of Google Static Maps.
    var staticMapUrl = "https://maps.googleapis.com/maps/api/staticmap";

    //Set the Google Map Center.
    staticMapUrl += "?center=" + mapOptions.center.G + "," + mapOptions.center.K;

    //Set the Google Map Size.
    staticMapUrl += "&size=220x350";

    //Set the Google Map Zoom.
    staticMapUrl += "&zoom=" + mapOptions.zoom;

    //Set the Google Map Type.
    staticMapUrl += "&maptype=" + mapOptions.mapTypeId;

    //Loop and add Markers.
    for (var i = 0; i < markers.length; i++) {
        var data = markers[i];

        if (data.pointNumber !== null) {
            var labelNumber = data.pointNumber;
            var labelString = labelNumber.toString();
            var iconName = 'm' + labelString + '.png';
            var roundLat = data.latitude; // + .00003;
            var roundLon = data.longitude; // + .000005;

            var myLatlng = new google.maps.LatLng(roundLat, roundLon);

            var image =
            {
                url: 'ImagesForPoints/' + iconName,
                scaledSize: new google.maps.Size(35, 48), // scaled size
                //size: new google.maps.Size(53, 73),
                //origin: new google.maps.Point(0,0), 
                //anchor: new google.maps.Point(30, 69)
                anchor: new google.maps.Point(19, 45)
            };


            var marker = new google.maps.Marker({
                position: myLatlng,
                map: map,
                icon: image,

            });

            bounds.extend(marker.position);
            map.fitBounds(bounds);

        }
    }

    //Display the Image of Google Map.
    var imgMap = document.getElementById("imgMap");
    imgMap.src = staticMapUrl;
    imgMap.style.display = "block";
}

1 个答案:

答案 0 :(得分:0)

由于您使用了从URL生成图像的Google Maps Static API,因此您的服务器端VB ASP.NET代码只需要用于生成图像的URL,以便能够下载它。

例如,Google Maps Static API中的以下网址将提供以纽约布鲁克林大桥为中心的图片:

https://maps.googleapis.com/maps/api/staticmap?center=Brooklyn+Bridge,New+York,NY&zoom=13&size=600x300&maptype=roadmap
&markers=color:blue%7Clabel:S%7C40.702147,-74.015794&markers=color:green%7Clabel:G%7C40.711614,-74.012318
&markers=color:red%7Clabel:C%7C40.718217,-73.998284

因此,您的服务器端代码需要此URL才能下载完全相同的图像。您可以通过以下方式获取服务器应用程序的URL:

  1. 以HTML表单提交(回发)发回URL。
  2. 编写一个接受下载URL的网络服务。
  3. 由于您似乎正在使用ASP.NET Web表单,因此第一个选项将是您最简单的选择。您需要做的就是在页面中添加一个asp:HiddenField控件

    <asp:HiddenField ID="MapURL" runat="server" ClientIDMode="static" />
    

    然后在JavaScript导出函数中设置字段的值:

    var mapUrlField = document.getElementById('<%= MapURL.ClientID %>');
    if (mapUrlField)
    {
        mapUrlField.value = staticMapUrl;
    }
    

    然后在回发服务器端,您可以从隐藏字段中检索URL,然后使用WebClient下载图像。

    Dim SaveFilePath as String = "c:\folder\mymap.png"
    Dim Client as new WebClient
    Client.DownloadFile(MapURL.Value, SaveFilePath )
    Client.Dispose