C# 使用 WebBrowser 实现 HTML 转图片功能
在 .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 中测试效果如下:
该方式的优点:
- 简单易用。
- 支持最新的 .NET Core 环境。
- 无需引用第三方类库,没有版权和安全性风险,安全且免费。
- 支持从互联网上加载内容。
该方式的缺点:
- 虽然支持 .NET Core ,但以上代码不能跨平台使用。
- WebBrowser 控件基于 IE 浏览器并受宿主操作系统影响,要求被呈现的网页具备较高的兼容性。
使用 IE8+ 版本进行渲染
笔者在实际工作中使用到了部分 CSS3 属性,默认情况下 WebBrowser 使用低版本的 IE 浏览器渲染网页,这会导致部分网页效果不生效,比如隔行变色效果。除了修改注册表,我们仍可以通过在网页中加入 meta
标签的方式告知 WebBrowser 使用高版本的 IE 浏览器进行渲染,仅需将以下代码复制至 HTML 的 head 标签内即可:
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
C# 使用 WebBrowser 实现 HTML 转图片功能相关推荐
- c# html转为图片,C# 使用 WebBrowser 实现 HTML 转图片功能的示例代码
在 .NET 平台上,我们有多种方式可以将一段 HTML 文本转换为一张图片:HTML Renderer.SelectPdf .Aspose.Html等. 在 WinForm 程序中,每一个 Syst ...
- php图片转字符程序,PHP文字转图片功能原理与实现方法分析
本文实例讲述了PHP文字转图片功能.分享给大家供大家参考,具体如下: 这项功能主要用于对邮箱地址.手机等可能被网络爬虫抓取的重要信息的处理.将文字转化为图片绝对是个好注意.验证码的基本生成原理也与此差 ...
- 百度UEditor编辑器关闭抓取远程图片功能(默认开启)
2019独角兽企业重金招聘Python工程师标准>>> 这个坑娘的功能,开始时居然不知道如何触发,以为有个按钮,点击一下触发,翻阅了文档,没有发现,然后再网络上看到原来是复制粘贴非白 ...
- python绘制动态模拟图-Python 模拟动态产生字母验证码图片功能
模拟动态产生字母验证码图片 模拟生成验证码,首先要做的是生成随机的字母,然后对字母进行模糊处理.这里介绍一下 Python 提供的 Pillow 模块. Pillow PIL:Python Image ...
- python爬取贴吧所有帖子-Python实现的爬取百度贴吧图片功能完整示例
本文实例讲述了Python实现的爬取百度贴吧图片功能.分享给大家供大家参考,具体如下: #coding:utf-8 import requests import urllib2 import urll ...
- python生成字母图片_Python 模拟动态产生字母验证码图片功能
模拟动态产生字母验证码图片 模拟生成验证码,首先要做的是生成随机的字母,然后对字母进行模糊处理.这里介绍一下 Python 提供的 Pillow 模块. Pillow PIL:Python Image ...
- JS实现Echarts的图表保存为图片功能
文章目录 需求分析 开发准备 实现思路 效果图 参考链接 需求分析 实际项目开发过程中经常会有图表展示功能,同时为了满足用户需要,会附带着图表导出功能,主要形式就是保存为图片.在Echarts中本身就 ...
- ubuntu下使用python将ppt转成图片_Ubuntu下使用Python实现游戏制作中的切分图片功能...
本文实例讲述了Ubuntu下使用Python实现游戏制作中的切分图片功能.分享给大家供大家参考,具体如下: why 拿到一个人物行走的素材,要用TexturePacker打包.TexturePacke ...
- android点击加号,Android仿微信朋友圈点击加号添加图片功能
本文为大家分享了类似微信朋友圈,点击+号图片,可以加图片功能,供大家参考,具体内容如下 xml: xmlns:app="http://schemas.android.com/apk/res- ...
最新文章
- MacPro 系统空间竟占90G,如何清理--OmniDiskSweeper
- CSS基础学习-5.CSS属性_字体文本文本装饰
- 解决element 照片墙上传时回显问题
- IDE硬盘,SATA硬盘,SCSI硬盘有什么区别
- LVS+Keepalive 实现负载均衡高可用集群
- html5圆圈图标,html5移动端环形图标菜单代码
- as常用固定搭配_英语考试干货!205个常用介词固定搭配
- android 偏好设置,SharedPreferences保存、显示用户偏好设置
- 浏览器调试时控制台出现:Uncaught SyntaxError: Unexpected identifier
- linux /etc/profile文件,Linux 配置文件 /etc/profile
- Python教学与学习过程中应注意的九句话
- 大学计算机课程复习--软件工程
- jquery中attr() 和 prop()的区别
- MATLAB表示非线性系统,matlab非线性控制系统分析.ppt
- 6.2 栅格数据矢量化
- 职称专业技术工作小结 计算机,申报计算机专业中级职称任职来专业技术工作总结(范文).doc...
- PHP连接数据库——身份验证问题
- ppt转图片LibreOffice解决方案--java
- 胡水生:中小型企业如何应对互联网的发展
- angular检测ie浏览器,并给用户提示