获取网站截图在许多情况下是非常有用的,例如制作网站的预览图或者进行网站活动的可视化展示。在 Asp.Net 中,我们可以使用 WebBrowser 控件来实现这一功能。
以下是获取网站截图的实例代码:
步骤一:安装并使用 WebBrowser 控件
首先需要在 Asp.Net 项目中使用 WebBrowser 控件,借助于该控件,可以实现让程序自动打开网站并截取当前页面。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="Button1" runat="server" Text="Capture Screenshot" OnClick="Button1_Click" />
<br /><br />
<asp:Image ID="Image1" runat="server" />
</div>
</form>
</body>
</html>
在上述代码中,我们在页面中放置了一个 Button 按钮和一个 Image 图片控件。在按钮的 OnClick 事件处理程序中,将使用 WebBrowser 控件打开指定的网站,并在 Image 控件中显示截图。
protected void Button1_Click(object sender, EventArgs e)
{
WebBrowser browser = new WebBrowser();
browser.ScrollBarsEnabled = false;
browser.ScriptErrorsSuppressed = true;
browser.Navigate(txtUrl.Text);
while (browser.ReadyState != WebBrowserReadyState.Complete)
{
System.Windows.Forms.Application.DoEvents();
}
browser.Width = browser.Document.Body.ScrollRectangle.Width;
browser.Height = browser.Document.Body.ScrollRectangle.Height;
Bitmap bitmap = new Bitmap(browser.Width, browser.Height);
browser.DrawToBitmap(bitmap, new Rectangle(0, 0, browser.Width, browser.Height));
browser.Dispose();
Image1.ImageUrl = "data:image/png;base64," + Convert.ToBase64String(encodeJpeg(bitmap));
}
private byte[] encodeJpeg(Bitmap bmp)
{
MemoryStream memoryStream = new MemoryStream();
bmp.Save(memoryStream, ImageFormat.Jpeg);
byte[] bmpBytes = memoryStream.GetBuffer();
bmp.Dispose();
memoryStream.Close();
return bmpBytes;
}
在上述代码的 Button1_Click 事件处理程序中,创建了一个新的 WebBrowser 控件,并设置 ScrollBarsEnabled 和 ScriptErrorsSuppressed 属性为 false 和 true,以便禁用滚动条并不显示脚本出错信息。接着在 WebBrowser 控件中导航到指定的 URL。为了等待页面加载完成,使用了 while 循环和应用程序的 DoEvents() 方法。然后计算了屏幕的宽度和高度,创建了一个新的 Bitmap 对象,并使用 DrawToBitmap 方法将 WebBrowser 绘制到 Bitmap 中。最后在 Image 控件中显示截图。
步骤二:在项目中添加 System.Windows.Forms 和 System.Drawing 引用
由于使用了 System.Windows.Forms 和 System.Drawing 命名空间,因此需要在项目中添加这两个引用。
两条示例说明:
示例一
以下代码将返回指定网站的截图,注意要替换 txtUrl 的值为目标网站 URL。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="txtUrl" runat="server" Text="https://www.baidu.com"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Capture Screenshot" OnClick="Button1_Click" />
<br /><br />
<asp:Image ID="Image1" runat="server" />
</div>
</form>
</body>
</html>
示例二
以下代码将返回指定网站的截图(以 JPEG 格式),并将图片保存在本地磁盘上。
private void CaptureScreenshot()
{
WebBrowser browser = new WebBrowser();
browser.ScrollBarsEnabled = false;
browser.ScriptErrorsSuppressed = true;
browser.Navigate("https://www.google.com");
while (browser.ReadyState != WebBrowserReadyState.Complete)
{
System.Windows.Forms.Application.DoEvents();
}
browser.Width = browser.Document.Body.ScrollRectangle.Width;
browser.Height = browser.Document.Body.ScrollRectangle.Height;
Bitmap bitmap = new Bitmap(browser.Width, browser.Height);
browser.DrawToBitmap(bitmap, new Rectangle(0, 0, browser.Width, browser.Height));
browser.Dispose();
ImageCodecInfo codecInfo = ImageCodecInfo.GetImageEncoders().Where(codec => codec.FormatID == ImageFormat.Jpeg.Guid).FirstOrDefault();
EncoderParameters encoderParams = new EncoderParameters();
EncoderParameter encoderParam = new EncoderParameter(Encoder.Quality, 90L);
encoderParams.Param[0] = encoderParam;
bitmap.Save(@"C:\temp\screen.jpg", codecInfo, encoderParams);
bitmap.Dispose();
}
在这个示例中,不需要任何控件,直接在代码中调用截图函数即可。截图将被保存在本地磁盘的“C:\temp\screen.jpg”文件中,图片的品质设置为90%。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Asp.Net获取网站截图的实例代码 - Python技术站