在 .NET 平台上,我们有多种方式可以将一段 HTML 文本转换为一张图片:HTML Renderer、SelectPdf 、Aspose.Html 等。

在 WinForm 程序中,每一个 System.Windows.Forms.Control 的派生类型均包含一个名为 DrawToBitmap 的方法,该方法可以将控件绘制到一张图片上。WebBrowser 具备显示 HTML 的功能,又因为其从 Control 类型派生,所以包含 DrawToBitmap 方法。我们只需将要在 WebBrowser 上加载要展示的 HTML 并在其 DocumentCompleted 事件中绘制图片即可:

public static async Task<Image> HtmlToImage(String html, int width = 1024, int height = 768) { var taskCompletionSource = new TaskCompletionSource<Image>(); var thread = new Thread(() => { using var browser = new WebBrowser { Width = width, Height = height, ScrollBarsEnabled = false }; browser.DocumentCompleted += (s, e) => { var b = s as WebBrowser; if (b == null) { return; } var bmp = new Bitmap(b.Width, b.Height); b.DrawToBitmap(bmp, new Rectangle(0, 0, b.Width, b.Height)); taskCompletionSource.SetResult(bmp); Application.ExitThread(); }; browser.DocumentText = html; Application.Run(); }); thread.SetApartmentState(ApartmentState.STA); thread.Start(); return await taskCompletionSource.Task; }

以上代码参考了: Stack Overflow ,笔者将其改造为异步方法并增加了必要的释放功能。在 LINQPad 中测试效果如下:

该方式的优点:

  1. 简单易用。
  2. 支持最新的 .NET Core 环境。
  3. 无需引用第三方类库,没有版权和安全性风险,安全且免费。
  4. 支持从互联网上加载内容。

该方式的缺点:

  1. 虽然支持 .NET Core ,但以上代码不能跨平台使用。
  2. WebBrowser 控件基于 IE 浏览器并受宿主操作系统影响,要求被呈现的网页具备较高的兼容性。

使用 IE8+ 版本进行渲染

笔者在实际工作中使用到了部分 CSS3 属性,默认情况下 WebBrowser 使用低版本的 IE 浏览器渲染网页,这会导致部分网页效果不生效,比如隔行变色效果。除了修改注册表,我们仍可以通过在网页中加入 meta 标签的方式告知 WebBrowser 使用高版本的 IE 浏览器进行渲染,仅需将以下代码复制至 HTML 的 head 标签内即可:

<meta http-equiv="X-UA-Compatible" content="IE=edge"/>

C# 使用 WebBrowser 实现 HTML 转图片功能相关推荐

  1. c# html转为图片,C# 使用 WebBrowser 实现 HTML 转图片功能的示例代码

    在 .NET 平台上,我们有多种方式可以将一段 HTML 文本转换为一张图片:HTML Renderer.SelectPdf .Aspose.Html等. 在 WinForm 程序中,每一个 Syst ...

  2. php图片转字符程序,PHP文字转图片功能原理与实现方法分析

    本文实例讲述了PHP文字转图片功能.分享给大家供大家参考,具体如下: 这项功能主要用于对邮箱地址.手机等可能被网络爬虫抓取的重要信息的处理.将文字转化为图片绝对是个好注意.验证码的基本生成原理也与此差 ...

  3. 百度UEditor编辑器关闭抓取远程图片功能(默认开启)

    2019独角兽企业重金招聘Python工程师标准>>> 这个坑娘的功能,开始时居然不知道如何触发,以为有个按钮,点击一下触发,翻阅了文档,没有发现,然后再网络上看到原来是复制粘贴非白 ...

  4. python绘制动态模拟图-Python 模拟动态产生字母验证码图片功能

    模拟动态产生字母验证码图片 模拟生成验证码,首先要做的是生成随机的字母,然后对字母进行模糊处理.这里介绍一下 Python 提供的 Pillow 模块. Pillow PIL:Python Image ...

  5. python爬取贴吧所有帖子-Python实现的爬取百度贴吧图片功能完整示例

    本文实例讲述了Python实现的爬取百度贴吧图片功能.分享给大家供大家参考,具体如下: #coding:utf-8 import requests import urllib2 import urll ...

  6. python生成字母图片_Python 模拟动态产生字母验证码图片功能

    模拟动态产生字母验证码图片 模拟生成验证码,首先要做的是生成随机的字母,然后对字母进行模糊处理.这里介绍一下 Python 提供的 Pillow 模块. Pillow PIL:Python Image ...

  7. JS实现Echarts的图表保存为图片功能

    文章目录 需求分析 开发准备 实现思路 效果图 参考链接 需求分析 实际项目开发过程中经常会有图表展示功能,同时为了满足用户需要,会附带着图表导出功能,主要形式就是保存为图片.在Echarts中本身就 ...

  8. ubuntu下使用python将ppt转成图片_Ubuntu下使用Python实现游戏制作中的切分图片功能...

    本文实例讲述了Ubuntu下使用Python实现游戏制作中的切分图片功能.分享给大家供大家参考,具体如下: why 拿到一个人物行走的素材,要用TexturePacker打包.TexturePacke ...

  9. android点击加号,Android仿微信朋友圈点击加号添加图片功能

    本文为大家分享了类似微信朋友圈,点击+号图片,可以加图片功能,供大家参考,具体内容如下 xml: xmlns:app="http://schemas.android.com/apk/res- ...

最新文章

  1. MacPro 系统空间竟占90G,如何清理--OmniDiskSweeper
  2. CSS基础学习-5.CSS属性_字体文本文本装饰
  3. 解决element 照片墙上传时回显问题
  4. IDE硬盘,SATA硬盘,SCSI硬盘有什么区别
  5. LVS+Keepalive 实现负载均衡高可用集群
  6. html5圆圈图标,html5移动端环形图标菜单代码
  7. as常用固定搭配_英语考试干货!205个常用介词固定搭配
  8. android 偏好设置,SharedPreferences保存、显示用户偏好设置
  9. 浏览器调试时控制台出现:Uncaught SyntaxError: Unexpected identifier
  10. linux /etc/profile文件,Linux 配置文件 /etc/profile
  11. Python教学与学习过程中应注意的九句话
  12. 大学计算机课程复习--软件工程
  13. jquery中attr() 和 prop()的区别
  14. MATLAB表示非线性系统,matlab非线性控制系统分析.ppt
  15. 6.2 栅格数据矢量化
  16. 职称专业技术工作小结 计算机,申报计算机专业中级职称任职来专业技术工作总结(范文).doc...
  17. PHP连接数据库——身份验证问题
  18. ppt转图片LibreOffice解决方案--java
  19. 胡水生:中小型企业如何应对互联网的发展
  20. angular检测ie浏览器,并给用户提示

热门文章

  1. UIImage 图像-IOS开发 (实例)
  2. 使用Google Font API
  3. 秒级快速批量创建kvm虚拟机并指定IP地址和主机名
  4. EtherCAT是什么?
  5. LeetCode 2. Add Two Numbers
  6. STL——vector容器详解
  7. 【AI视野·今日Robot 机器人论文速览 第十四期】Thu, 24 Jun 2021
  8. 【最快人脸检测模型开源】libfacedetection开源
  9. Ubuntu 16.04 下修改免安裝版tomcat的內存大小
  10. linux下下安装jdk-6u45-linux-x64.bin