阅读一个带有Base64-Embedded格式的所有图像的网页
本文关键字:Base64-Embedded 格式 网页 图像 一个 | 更新日期: 2023-09-27 18:10:21
在我的场景中,我想以编程方式下载一个页面(互联网上的任何页面)的HTML,但我也希望HTML中的所有图像都在base64嵌入格式(未引用)
换句话说,不是:
<img src='/images/delete.gif' />
我希望下载的html看起来像这样:
<img src="data:image/gif;base64,R0lGODl..." />
这样我就不需要经历将所有图像存储在目录中的过程,等等。
你们中有人知道怎么做吗?或者任何插件来有效地做到这一点?
嗯,你需要:
- 下载原始HTML
- 找到HTML中的每个
img
元素(例如使用HTML敏捷包),并为每个元素:- 如果它已经使用了一个数据URL,忽略它 否则
- :
- 下载图片
- 使用
Convert.ToBase64String
将其编码为Base64 - 将原来的
img
标签替换为使用base64版本的标签(无论是在原始字符串中,还是通过DOM表示)
- 保存最终的HTML到磁盘
这些步骤中是否有任何一个导致了您的特定问题?您可以通过并行下载图像来加快速度,但我希望先获得串行版本。
与其在src属性中使用带有base64编码字符串的图像的html页面,不如考虑使用MHTML格式。大多数浏览器都支持这种格式,并且它嵌入了所有外部资源(包括图像)。
var msg = new CDO.MessageClass();
msg.MimeFormatted = true;
msg.CreateMHTMLBody("http://www.google.com", CDO.CdoMHTMLFlags.cdoSuppressNone, "", "");
var stream = msg.GetStream();
var mhtml = stream.ReadText(stream.Size);
使用正则表达式(regex)从img标签中提取url,使用Uri类将其转换为绝对url,然后使用WebClient下载目标图像。在那之后,它只是一个使用转换的情况。ToBase64String用于生成Base64.