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# 设计模式系列教程-命令模式

    C# 设计模式系列教程-命令模式 什么是命令模式 命令模式是一种行为设计模式,它能把请求或操作封装起来,以便在不同上下文中进行参数化、延迟执行或支持撤销操作。命令模式把命令的发送者和接收者解耦,并且把命令操作封装成对象,这些对象可以用队列进行管理。 在命令模式中,任何对象都可以扮演“命令”的角色,唯一的要求是具备两项能力: 执行这个请求的操作。 把请求的接收…

    C# 2023年5月31日
    00
  • asp.net 备份和恢复数据库的方法示例

    当我们在开发ASP.NET项目的时候,经常需要用到对数据库的备份和恢复。本文将详细介绍如何使用SQL Server Management Studio(SSMS)和Transact-SQL(T-SQL)备份和恢复数据库,以及在ASP.NET中使用C#代码备份和恢复数据库。 使用SQL Server Management Studio(SSMS)备份和恢复数据…

    C# 2023年5月31日
    00
  • C#设计模式之工厂模式

    C#设计模式之工厂模式 什么是工厂模式? 工厂模式是指为创建对象定义一个接口,让子类决定实例化哪一个类。工厂模式让一个类的实例化延迟到其子类。使用工厂模式我们可以让对象的创建和实现分离,当我们需要增加一种新的对象时,我们只需要添加一个新的具体的类和它相应的工厂类就可以了,不会对原来的代码产生太多的影响。 工厂模式的三种形式 简单工厂模式 工厂方法模式 抽象工…

    C# 2023年6月1日
    00
  • WinForm调用jar包的方法分析

    WinForm是一种Windows桌面应用程序开发框架,而Java的jar包是一种Java程序打包方式。在WinForm应用程序中,我们可能需要调用Java的jar包来实现某些功能。本文将提供详解“WinForm调用jar包的方法分析”的完整攻略,包括如何将Java的jar包添加到WinForm项目中、如何在WinForm中调用Java的jar包等。 将Ja…

    C# 2023年5月15日
    00
  • C#中的 == 和equals()区别浅析

    C#中的==和equals()区别浅析 在C#中,我们经常会使用 == 运算符和 equals() 方法来比较两个对象是否相等。但是,你是否知道它们的区别呢?本文将深入探讨 == 和 equals() 方法之间的区别,并提供一些示例来帮助你更好的理解它们之间的差异。 == 运算符 首先来看 == 运算符。C#中的 == 运算符用于比较两个对象的值是否相等。如…

    C# 2023年5月15日
    00
  • C#关于Task.Yeild()函数的讨论

    当我们使用异步编程模型时,Task类就成了我们常用的工具之一。而Task.Yield()方法也是Task类中的一个重要成员,其可以帮助我们优化程序性能并且提高并发的效率。接下来,我将为大家讲解C#关于Task.Yield()函数的讨论,内容如下: 什么是Task.Yield()函数 Task.Yield()是Task类中的一个静态方法,其作用是暂停当前线程的…

    C# 2023年6月1日
    00
  • C#(.NET)数据访问连接、查询、插入等操作的封装类

    C#(.NET)数据访问连接、查询、插入等操作的封装类是开发.NET应用程序必不可少的一部分。下面是整个封装类的详细攻略。 1.数据库连接 1.1 数据库连接字符串 在封装类中,首先需要定义数据库的连接字符串。连接字符串包含数据库服务器名、数据库名、用户身份验证等信息。 string connectionString = "Server=mySer…

    C# 2023年5月31日
    00
  • C# 9 新特性之增强的foreach详解

    C# 9 新特性之增强的 foreach 详解 简介 在 C# 9 中,foreach 循环得到了一些增强,包括更好的性能,支持使用 ref 局部变量以及对 IAsyncEnumerable 类型的异步迭代支持。 更好的性能 在 C# 9 中,foreach 的性能得到了提升。它会通过对枚举器对象的优化,减少一些额外的开销,以获得更好的性能。 ref 局部变…

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