You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中从HTML字符串获取图片字节数组?

替代Winnovative获取HTML转图片字节数组的方案

方案1:使用PuppeteerSharp(推荐,支持现代HTML/CSS)

PuppeteerSharp基于Chrome DevTools协议,能精准渲染现代HTML和CSS,生成与浏览器一致的图片效果。

实现步骤:

  1. 安装NuGet包:PuppeteerSharp
  2. 编写转换方法:
using PuppeteerSharp;
using System.Drawing.Imaging;
using System.IO;

public static async Task<byte[]> GetHtmlImageBytesAsync(string htmlString, ImageFormat imageFormat)
{
    // 首次运行自动下载Chrome内核,后续复用
    await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);
    using var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true });
    using var page = await browser.NewPageAsync();
    
    // 加载HTML内容
    await page.SetContentAsync(htmlString);
    
    // 匹配目标图片格式
    var screenshotFormat = imageFormat == ImageFormat.Png ? ScreenshotFormat.Png : ScreenshotFormat.Jpeg;
    // 生成图片字节数组
    byte[] imageBytes = await page.ScreenshotAsync(new ScreenshotOptions { Format = screenshotFormat });
    
    return imageBytes;
}

使用提示:

  • 方法为异步类型,调用时需搭配await关键字
  • 支持响应式布局、动态脚本等复杂场景,渲染精度高

方案2:使用System.Windows.Forms.WebBrowser(适用于.NET Framework旧项目)

若项目基于.NET Framework且无需现代HTML支持,可使用内置的WebBrowser控件,依赖IE内核实现渲染。

using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Windows.Forms;

public static byte[] GetHtmlImageBytes(string htmlString, ImageFormat imageFormat)
{
    using var webBrowser = new WebBrowser { ScrollBarsEnabled = false };
    webBrowser.DocumentText = htmlString;
    
    // 等待页面加载完成
    while (webBrowser.ReadyState != WebBrowserReadyState.Complete)
    {
        Application.DoEvents();
    }
    
    // 调整控件尺寸匹配页面内容
    webBrowser.Width = webBrowser.Document.Body.ScrollRectangle.Width;
    webBrowser.Height = webBrowser.Document.Body.ScrollRectangle.Height;
    
    // 绘制页面到位图
    using var bitmap = new Bitmap(webBrowser.Width, webBrowser.Height);
    webBrowser.DrawToBitmap(bitmap, new Rectangle(0, 0, webBrowser.Width, webBrowser.Height));
    
    // 转换为字节数组
    using var ms = new MemoryStream();
    bitmap.Save(ms, imageFormat);
    return ms.ToArray();
}

注意事项:

  • 需引用System.Windows.Forms程序集
  • 对HTML5、CSS3等现代特性支持有限
  • 同步方法,UI线程调用可能导致阻塞

方案3:使用HtmlRenderer.WinForms(轻量级无浏览器依赖)

HtmlRenderer是轻量级HTML渲染库,无需浏览器内核,适合简单HTML场景。

实现步骤:

  1. 安装NuGet包:HtmlRenderer.WinForms
  2. 编写转换方法:
using HtmlRenderer.WinForms;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;

public static byte[] GetHtmlImageBytes(string htmlString, ImageFormat imageFormat)
{
    using var htmlPanel = new HtmlPanel();
    htmlPanel.Text = htmlString;
    
    // 计算页面所需尺寸
    htmlPanel.PerformLayout();
    var size = htmlPanel.GetPreferredSize(new Size(int.MaxValue, int.MaxValue));
    
    // 渲染HTML到位图
    using var bitmap = new Bitmap(size.Width, size.Height);
    using var g = Graphics.FromImage(bitmap);
    htmlPanel.Render(g, new Rectangle(0, 0, size.Width, size.Height));
    
    // 转换为字节数组
    using var ms = new MemoryStream();
    bitmap.Save(ms, imageFormat);
    return ms.ToArray();
}

特点:

  • 体积小,无额外浏览器依赖
  • 支持基础HTML和CSS,复杂样式可能存在兼容性问题

内容的提问来源于stack exchange,提问作者Praveen Nv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 11:40:33