阅读一个带有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..." />

这样我就不需要经历将所有图像存储在目录中的过程,等等。

你们中有人知道怎么做吗?或者任何插件来有效地做到这一点?

阅读一个带有Base64-Embedded格式的所有图像的网页

嗯,你需要:

  • 下载原始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.