在我的场景中,我想下载一个页面的HTML(互联网上的任何页面)programaticaly,但我也希望HTML中的所有图像都是 base64嵌入格式(未引用) )
换句话说,而不是:
<img src='/images/delete.gif' />
我希望下载的html看起来像这样:
<img src="data:image/gif;base64,R0lGODl..." />
这样我就不需要经历将所有图像存储在目录等中的过程。
你们有谁知道如何做到这一点?或者任何有效执行此操作的插件?
答案 0 :(得分:6)
嗯,你需要:
img
元素(例如使用HTML agility pack)和每个元素:
Convert.ToBase64String
img
标记替换为使用base64版本的标记(在原始字符串中,或通过DOM表示)这些步骤中的任何一个都会导致您遇到特定问题吗?你可以通过并行下载图像来加快速度,但我会先得到一个串行版本。
答案 1 :(得分:2)
您可以考虑使用MHTML格式,而不是在src属性中使用带有图像作为base64编码字符串的html页面。大多数浏览器都支持该格式,它嵌入了所有外部资源(包括图像)。
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);
答案 2 :(得分:0)
使用正则表达式(正则表达式)从img标记中提取URL,使用Uri类将它们转换为绝对URL,然后使用WebClient下载目标图像。之后,只是使用Convert.ToBase64String来生成Base64。