Asp.Net获取网站截图的实例代码

获取网站截图在许多情况下是非常有用的,例如制作网站的预览图或者进行网站活动的可视化展示。在 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技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • C#利用Task实现任务超时多任务一起执行的方法

    下面我将为你详细讲解“C#利用Task实现任务超时多任务一起执行的方法”的完整攻略。 1. 使用Task.WaitAny方法实现超时控制 在C#中,使用Task可以很方便地实现多任务并行执行,但是如果需要控制任务的执行时间,避免超时等问题,则需要使用Task.WaitAny方法。具体步骤如下: 步骤1:启动多个任务 首先,我们需要启动多个任务,让它们并行执行…

    C# 2023年6月6日
    00
  • 解决ASP.NET Core中使用漏桶算法限流的问题

    解决ASP.NET Core中使用漏桶算法限流的问题 在ASP.NET Core应用程序中,限流是一种常见的技术,用于控制应用程序的流量并防止过载。漏桶算法是一种常见的限流算法,它可以平滑地限制请求的速率。在本攻略中,我们将详细讲解如何在ASP.NET Core中使用漏桶算法限流,并提供两个示例说明。 步骤一:安装NuGet包 要使用漏桶算法限流,您需要安装…

    C# 2023年5月17日
    00
  • C#简单邮件群发通用类

    首先我们需要明确什么是C#邮件群发通用类。它是一种在C#编程语言下编写的针对邮件群发的通用类,可以基于.NET Framework的邮件类库(如SmtpClient)来快速发送“批量邮件”。下面是介绍如何编写和使用C#简单邮件群发通用类的步骤: 编写邮件群发通用类 1. 创建C#项目 在Visual Studio中创建一个新的控制台应用程序,我们将在该项目下…

    C# 2023年6月1日
    00
  • C# 后台处理图片的几种方法

    让我详细讲解一下“C# 后台处理图片的几种方法”的完整攻略。 一、背景 随着互联网的发展,图片已经成为了我们生活中不可或缺的一部分,也成为了我们经常会用到的一种媒体类型。在开发 Web 应用程序时,我们通常需要后台对图片进行处理,比如缩放、裁剪、添加水印等,以便我们可以在页面中展示或者保存这些图片。 二、C# 处理图片的几种方法 在 C# 中,有几种方法可以…

    C# 2023年6月1日
    00
  • 通俗易懂的C#之反射教程

    通俗易懂的C#之反射教程 什么是反射 反射是 .NET 框架中的一项功能,它允许程序员在编译时不知道类型的情况下,也能够使用对象的方法。简单来说就是让程序在运行时获取类型的信息,并且能够动态地创建对象、调用方法和获取或设置成员属性。 反射的作用 在实际编程中,反射使用频率非常高。它主要有以下几个作用: 动态加载程序集 在程序运行时检查类型信息 动态地创建对象…

    C# 2023年5月31日
    00
  • C#串口接收程序的实现

    C#串口接收程序的实现攻略 串口通信是一种常见的设备与计算机之间进行数据传输的方式。在C#中,我们可以使用SerialPort类来实现串口接收程序的实现。下面是实现串口接收程序的完整攻略: 1. 创建串口接收程序的项目 首先,我们需要创建一个新的C#项目。在Visual Studio中,可以通过选择“新建项目”并选择“控制台应用程序”来完成。在新建项目的过程…

    C# 2023年6月7日
    00
  • C#装箱和拆箱操作实例分析

    C#装箱和拆箱操作实例分析 装箱(Boxing) 装箱指的是将值类型转换为对象类型,即将一个值类型的数据放到一个堆分配的对象中。我们知道,值类型的数据是直接存储在内存栈空间中的,而对象类型的数据则是存储在堆空间中的。因此,当我们需要将一个值类型作为对象类型来处理时,就需要进行装箱操作。 下面是一个装箱操作的示例: int i = 123; object ob…

    C# 2023年6月7日
    00
  • CAD二次开发,安装程序中写注册表

    一、加载dll时写注册表 我们知道,dll加载到cad中后使用 HostApplicationServices.Current.RegistryProductRootKey() 就可以拿到当前cad的注册表,那么如果想在安装程序时写,此时并没有cad的环境,要怎么办呢? 二、获取所有已安装的cad的注册表路径 cad在安装后,会在注册表的计算机\HKEY_L…

    C# 2023年4月18日
    00
合作推广
合作推广
分享本页
返回顶部