【发布时间】:2019-12-27 07:30:08
【问题描述】:
想要即时更改类似于以下内容的 HTML:
<html><head><style>
body {
background: transparent url(http://example.com/image.gif) no-repeat right bottom;
}
</style><head>
<body>
<img src="http://example.com/image2.gif"/>
</body>
</html>
到(网址被剪掉):
<html><head><style>
body {
background: transparent url(data:image/gif;base64,R0lGODlhEAAOALMAAOazToeHh0tLS/...) no-repeat right bottom;
}
</style>
<head>
<body>
<img src="data:image/gif;base64,R0lGODlhEAAOALMAAOazToeHh0tLS/...."/>
</body>
</html>
现在我使用这个代码:
private string EmbebedImages(string strHtml)
{
var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(strHtml);
foreach (var imgNode in doc.DocumentNode.SelectNodes("//img[@src]"))
{
string url = imgNode.Attributes["src"].Value;
if (url.StartsWith("http"))
{
using (var webClient = new WebClient())
{
var imageAsByteArray = webClient.DownloadData(url);
string mimeType = MimeMapping.GetMimeMapping(url);
imgNode.Attributes["src"].Value = "data:" + mimeType + ";base64," +
Convert.ToBase64String(imageAsByteArray);
}
}
}
return doc.DocumentNode.OuterHtml;
}
但我的代码忽略了 CSS 中的 url。
是否可以使这种更改变得简单?我尝试了一些 css 库,但我找不到简单的表单...
【问题讨论】:
-
您只是在使用您的 c# 代码访问
img。你的意思是你需要带有 HtmlAgilityPack 的 css 背景图片? -
我需要更改所有 url 的样式。现在我只更改 IMG 标签中的网址。这只是一个示例。
标签: c# html css html-agility-pack