读取包含 Base64 嵌入格式的所有图像的网页
在我的场景中,我想以编程方式下载页面(互联网上的任何页面)的 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
那么,您需要:
img
元素(例如使用 HTML 敏捷包),对于每一个:Convert.ToBase64String
将其编码为 Base64img
标记替换为使用 base64 版本的标记(在原始字符串中或通过 DOM 表示形式)这些步骤中的任何一个是否会导致您遇到特定问题?您可以通过并行下载图像来加快速度,但我会首先使用串行版本。
Well, you'd need to:
img
element in the HTML (for instance using the HTML agility pack) and for each one:Convert.ToBase64String
img
tag with one using the base64 version (either in the original string, or via a DOM representation)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.
您可以考虑使用 MHTML 改为格式化。大多数浏览器都支持该格式,并且它嵌入了所有外部资源(包括图像)。
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).
使用正则表达式 (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.