读取包含 Base64 嵌入格式的所有图像的网页

发布于 2024-12-08 06:35:39 字数 362 浏览 1 评论 0原文

在我的场景中,我想以编程方式下载页面(互联网上的任何页面)的 HTML,但我也希望 HTML 中的所有图像都采用 base64 嵌入格式(未引用

)单词,而不是:

<img src='/images/delete.gif' />

我希望下载的html看起来像这样:

<img src="data:image/gif;base64,R0lGODl..." />

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

你们中的任何人都知道如何做到这一点?或者有什么插件可以有效地做到这一点?

In my scenario I want to download the HTML of a page (any page on the Internet) programaticaly but also I want all of the images in the HTML to be in base64 embedded format (not referenced)

In other words, instead of :

<img src='/images/delete.gif' />

I want the downloaded html to look like this:

<img src="data:image/gif;base64,R0lGODl..." />

This way I don't need to go through the process of storing all images in directories, etc, etc.

Does any of you have any idea how this can be done? Or any plugin to do this efficiently?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

九歌凝 2024-12-15 06:35:39

那么,您需要:

  • 下载原始 HTML
  • 查找 HTML 中的每个 img 元素(例如使用 HTML 敏捷包),对于每一个:
    • 如果已在使用数据网址,请忽略它
    • 否则:
    • 下载图片
    • 使用 Convert.ToBase64String 将其编码为 Base64
    • 将原始 img 标记替换为使用 base64 版本的标记(在原始字符串中或通过 DOM 表示形式)
  • 将最终 HTML 保存到磁盘

这些步骤中的任何一个是否会导致您遇到特定问题?您可以通过并行下载图像来加快速度,但我会首先使用串行版本。

Well, you'd need to:

  • Download the original HTML
  • Find each img element in the HTML (for instance using the HTML agility pack) and for each one:
    • If it's already using a data URL, ignore it
    • Otherwise:
    • Download the image
    • Encoded it in Base64 using Convert.ToBase64String
    • Replace the original img tag with one using the base64 version (either in the original string, or via a DOM representation)
  • Save the final HTML to disk

Is any of these steps causing you a particular problem? You could potentially make it quicker by downloading the images in parallel, but I'd get a serial version working first.

雅心素梦 2024-12-15 06:35:39

您可以考虑使用 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);

Instead of using a html page with images as base64 encoded strings in the src attribute you might consider using the MHTML format instead. Most browsers supports the format and it embeds all external resources (including images).

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);
梦太阳 2024-12-15 06:35:39

使用正则表达式 (regex) 从 img 标签中提取 URL,使用 Uri 类将其转换为绝对 URL,然后使用 WebClient 下载目标图像。之后,只需使用 Convert.ToBase64String 生成 Base64 即可。

Use a regular expression (regex) to extract URLs from img tags, translate them to absolute URLs using the Uri class, then use WebClient to download the target images. After that it's just a case of using Convert.ToBase64String to produce the Base64.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文