雷达智富

首页 > 内容 > 程序笔记 > 正文

程序笔记

c#网页保存为图片

2024-09-16 35

在 C# 中,可以使用 System.Windows.Forms.WebBrowser 控件来实现网页转图片的功能。如果开发 ASP.NET Core 应用程序,可以使用库来实现类似的功能,比如 PuppeteerSharp 或其他类似的工具。

以下是一个使用WebBrowser 控件来实现网页转图片的功能的示例:

using System;
using System.Drawing;
using System.Windows.Forms;

public class WebPageToImageConverter
{
    public static void ConvertToImage(string url, string savePath)
    {
        using (WebBrowser webBrowser = new WebBrowser())
        {
            webBrowser.ScrollBarsEnabled = false;
            webBrowser.ScriptErrorsSuppressed = true;
            webBrowser.Navigate(url);
            webBrowser.DocumentCompleted += (sender, e) =>
            {
                // 等待页面加载完毕后截图
                webBrowser.ClientSize = new Size(webBrowser.Document.Body.ScrollRectangle.Width, webBrowser.Document.Body.ScrollRectangle.Height);
                Bitmap bitmap = new Bitmap(webBrowser.Width, webBrowser.Height);
                webBrowser.DrawToBitmap(bitmap, new Rectangle(0, 0, webBrowser.Width, webBrowser.Height));
                bitmap.Save(savePath, System.Drawing.Imaging.ImageFormat.Png);
                bitmap.Dispose();
            };

            while (webBrowser.ReadyState != WebBrowserReadyState.Complete)
            {
                Application.DoEvents();
            }
        }
    }
}

使用方法:

WebPageToImageConverter.ConvertToImage("http://example.com", "output.png");

上述代码将打开一个隐藏的 WebBrowser 控件,加载指定的网页,然后等待页面加载完毕后将其转为图片并保存到指定路径。请注意,这段代码需要在具有 UI 上下文的环境中运行,比如 Windows Forms 应用程序。

PuppeteerSharp 是一个 .NET 版本的 Puppeteer 库,它可以用来模拟浏览器行为并进行网页截图等操作。以下是一个示例代码,演示了如何使用 PuppeteerSharp 将网页保存为图片:

首先,需要在你的项目中安装 PuppeteerSharp 包。可以在 NuGet 包管理器中搜索并安装 PuppeteerSharp。

using PuppeteerSharp;
using System;
using System.Threading.Tasks;

public class WebPageToImageConverter
{
    public static async Task ConvertToImage(string url, string savePath)
    {
        await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);
        using (var browser = await Puppeteer.LaunchAsync(new LaunchOptions
        {
            Headless = true
        }))
        using (var page = await browser.NewPageAsync())
        {
            await page.GoToAsync(url);
            await page.ScreenshotAsync(savePath);
        }
    }
}

然后,在代码中调用这个方法来将网页保存为图片:

await WebPageToImageConverter.ConvertToImage("http://example.com", "output.png");

这个示例使用 PuppeteerSharp 打开一个无头浏览器,然后访问指定的网页并截取屏幕快照,最后将图片保存到指定路径。

需要在异步方法中调用这个操作,并在合适的地方处理可能的异常。另外,确保在项目中引用了 PuppeteerSharp 包。

更新于:2个月前
赞一波!

文章评论

评论问答