Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 阅读包含所有Base64嵌入格式图像的网页_C#_Html_Web - Fatal编程技术网

C# 阅读包含所有Base64嵌入格式图像的网页

C# 阅读包含所有Base64嵌入格式图像的网页,c#,html,web,C#,Html,Web,在我的场景中,我希望以编程方式下载页面(Internet上的任何页面)的HTML,但我也希望HTML中的所有图像都采用base64嵌入格式(未引用) 换句话说,不是: <img src='/images/delete.gif' /> 我希望下载的html如下所示: <img src="data:image/gif;base64,R0lGODl..." /> 这样我就不需要经历将所有图像存储在目录中的过程 你们有谁知道怎么做吗?或任何插件来有效地执行此操作?好的

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

换句话说,不是:

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

我希望下载的html如下所示:

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

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

你们有谁知道怎么做吗?或任何插件来有效地执行此操作?

好的,您需要:

  • 下载原始HTML
  • 查找HTML中的每个
    img
    元素(例如使用),并针对每个元素:
    • 如果它已经在使用数据URL,请忽略它
    • 否则:
    • 下载图片
    • 使用
      Convert.ToBase64String
    • 将原始的
      img
      标记替换为使用base64版本的标记(在原始字符串中或通过DOM表示)
  • 将最终HTML保存到磁盘
这些步骤中有任何一个会导致您出现特定问题吗?您可以通过并行下载图像来加快下载速度,但我会先使用串行版本。

好的,您需要:

  • 下载原始HTML
  • 查找HTML中的每个
    img
    元素(例如使用),并针对每个元素:
    • 如果它已经在使用数据URL,请忽略它
    • 否则:
    • 下载图片
    • 使用
      Convert.ToBase64String
    • 将原始的
      img
      标记替换为使用base64版本的标记(在原始字符串中或通过DOM表示)
  • 将最终HTML保存到磁盘

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

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

使用正则表达式(regex)从img标记中提取URL,使用Uri类将其转换为绝对URL,然后使用WebClient下载目标图像。之后,这只是一个使用Currut.ToBase64字符串生成Base64./P>>P>的例子,而不是使用带有SRC属性的Base64编码字符串的HTML页面,您可以考虑使用该格式。大多数浏览器都支持这种格式,并且它嵌入了所有外部资源(包括图像)


<>而不是使用带有SRC属性的Base64编码字符串的HTML页面,您可以考虑使用该格式。大多数浏览器都支持这种格式,并且它嵌入了所有外部资源(包括图像)


base-64字符串中的图像尺寸较大,使HTML源代码无法读取。为什么要将所有外部源转换为base-64字符串?这怎么不是一个真正的问题!!我对大小没有意见,因为所有的大小都将在多个请求中从网络中请求。base-64字符串中的图像大小更大,使HTML源无法读取。为什么要将所有外部源转换为base-64字符串?这怎么不是一个真正的问题!!我对大小没问题,因为所有的大小都会在多个请求中从网络上被请求。我很好奇是否有一种神奇的方法可以做到这一点,因为我非常关心优化。但是当你这么说的时候,我应该去做:)-Thanks@valipour:这是一个非常不寻常的要求,因此如果有现成的工具来完成这项工作,我会感到惊讶。但是,是的,去做吧。也要考虑你正在努力优化什么,并设定自己的性能目标,这样你就知道什么时候你能停下来。我很好奇,看看有没有神奇的方法来做这件事,因为我非常关心优化。但是当你这么说的时候,我应该去做:)-Thanks@valipour:这是一个非常不寻常的要求,因此如果有现成的工具来完成这项工作,我会感到惊讶。但是,是的,去做吧。还要考虑你想要优化什么,并设定自己的性能目标,这样你就知道什么时候可以停止。至少在Chrome中,保存为…mhtml实际上并没有将图像作为base64数据源嵌入。我不敢相信没有一个简单的应用程序能做到这一点。应用程序、程序、实用程序等等。在这一点上,我甚至会接受一个NPM包。因为我们有一个漂亮的“网页”,所以我们需要以时事通讯的形式发送出去。至少在Chrome中,另存为。。。mhtml实际上并没有将图像作为base64数据源嵌入。我不敢相信没有一个简单的应用程序能做到这一点。应用程序、程序、实用程序等等。在这一点上,我甚至会接受一个NPM包。因为我们有一个很好的“网页”,所以我们需要作为时事通讯发送出去。
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);