Ste*_*ers 97 c# favicon .net-4.0
简单问题:我创建了一个小应用程序,它基本上只是我系统托盘中的收藏夹,以便我可以从同一个地方打开常用的站点/文件夹/文件.从我的系统获取已知文件类型的默认图标并不是非常复杂,但我不知道如何从网站获取favicon.(例如,SO在地址栏中有灰色 - >橙色堆栈图标)
有谁知道我会怎么做?
hun*_*ter 207
你想要通过以下几种方式解决这个问题:
寻找favicon.ico域的根目录
www.domain.com/favicon.ico
查找<link>具有该rel="shortcut icon"属性的标记
<link rel="shortcut icon" href="/favicon.ico" />
查找<link>具有该rel="icon"属性的标记
<link rel="icon" href="/favicon.png" />
后两者通常会产生更高质量的图像.
只是为了涵盖所有基础,有设备特定的图标文件可能会产生更高质量的图像,因为这些设备通常在设备上有比浏览器需要更大的图标:
<link rel="apple-touch-icon" href="images/touch.png" />
<link rel="apple-touch-icon-precomposed" href="images/touch.png" />
要下载图标而不关心图标是什么,您可以使用像http://www.google.com/s2/favicons这样的实用程序来完成所有繁重的工作:
var client = new System.Net.WebClient();
client.DownloadFile(
@"http://www.google.com/s2/favicons?domain=stackoverflow.com",
"stackoverflow.com.ico");
Run Code Online (Sandbox Code Playgroud)
希望有所帮助!
Che*_*a_K 17
这个问题是我不断搜索网站 favicon API 时得到的第一个谷歌搜索结果。所以我认为这对未来还是有帮助的。
https://icon.horse/icon/[url.hostname]将为您提供更好的网站图标。
https://icon.horse/icon/stackoverflow.com
Blo*_*sie 10
这里有两个选项,我测试了超过100个网址,并得到了不同的结果,每个选项.请注意,此解决方案不是c#,但可能不需要c#.
<img height="16" width="16" src='http://grabicon.com/edocuments.co.uk' />
<img height="16" width="16" src='http://www.google.com/s2/favicons?domain=www.edocuments.co.uk' />
Run Code Online (Sandbox Code Playgroud)
您可以使用Google S2 Converter.
http://www.google.com/s2/favicons?domain=google.com
资料来源:http://www.labnol.org/internet/get-favicon-image-of-websites-with-google/4404/
2020 年,通过 CLI 使用 duckduckgo.com 的服务
curl -v https://icons.duckduckgo.com/ip2/<website>.ico > favicon.ico
Run Code Online (Sandbox Code Playgroud)
例子
curl -v https://icons.duckduckgo.com/ip2/www.cdc.gov.ico > favicon.ico
Run Code Online (Sandbox Code Playgroud)
结合我自己的研究和下面的其他一些资源的答案。
根据您的要求,有几种方法可以实现。有些比其他更可靠
获取将图标嵌入其他位置的 url:
domain=google.com为domain=<other_website_domain>一起获取多个网站图标
其他替代方案
chrome://favicon/https://google.comedge://favicon/https://google.comshortcut icon,如果找到则复制 URL。要查找的第一件事是站点根目录中的/favicon.ico; 像WebClient.DownloadFile()这样的东西应该没问题.但是,您也可以在元数据中设置图标 - 对于SO,这是:
<link rel="shortcut icon"
href="http://sstatic.net/stackoverflow/img/favicon.ico">
Run Code Online (Sandbox Code Playgroud)
并注意可能有替代图标; "触摸"趋向于更大和更高的res,例如:
<link rel="apple-touch-icon"
href="http://sstatic.net/stackoverflow/img/apple-touch-icon.png">
Run Code Online (Sandbox Code Playgroud)
所以你要在HTML Agility Pack或XmlDocument(如果是xhtml)中解析它并使用WebClient.DownloadFile()
以下是我通过敏捷包获得的一些代码:
var favicon = "/favicon.ico";
var el=root.SelectSingleNode("/html/head/link[@rel='shortcut icon' and @href]");
if (el != null) favicon = el.Attributes["href"].Value;
Run Code Online (Sandbox Code Playgroud)
请注意,图标是他们的,而不是你的.
尽量减少每个页面所需的请求数量是一种很好的做法。因此,如果您需要多个图标,yandex 可以在一个查询中创建一个图标精灵。这是一个示例 http://favicon.yandex.net/favicon/google.com/stackoverflow.com/yandex.net/
您可以从网站的 HTML 中获取网站图标 URL。
这是favicon元素:
<link rel="icon" type="image/png" href="/someimage.png" />
Run Code Online (Sandbox Code Playgroud)
您应该在这里使用正则表达式。如果未找到标记,请favicon.ico在站点根目录中查找。如果未找到任何内容,则该站点没有图标。
无需编程,只需3 步即可完成:
<link rel="icon" href='/SOMERELATIVEPATH/favicon.ico' type="image/x-icon" />
获取字符串href并将其附加到网站的基本 URL(假设它是"http://WEBSITE/"),因此它看起来像
http://WEBSITE/SOMERELATIVEPATH/favicon.ico
这是 favicon 的绝对路径。如果你没有通过这种方式找到它,它也可以在根目录中,在这种情况下,URL 是http://WEBSITE/favicon.ico.
<html>
<head>
<title>Capture Favicon</title>
</head>
<body>
<a href='http://WEBSITE/SOMERELATIVEPATH/favicon.ico' alt="Favicon"/>Favicon</a>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
121255 次 |
| 最近记录: |