2014-02-24 27 views
19

我正在开发Android上的网络浏览器,并希望显示访问量最高的网站(如Chrome(4 X 2))的URL徽标。但问题是,大多数图标(例如:http://www.bbc.co.uk/favicon.ico)的尺寸为16X16或32X32,并且在放大时看起来不太好。如何获得给定URL的高分辨率网站徽标(图标)

有没有办法以标准方式下载URL的高分辨率图标/位图?如何打开主页,然后提取所有图像链接,然后选择一个名称为logo的图像?此方法适用于所有网址吗?我想知道是否有一个标准的方式来获得一个给定的URL的高分辨率图标或favicon是获得网站标志的唯一标准方式?

+1

火狐需要经常访问的网页截图,并安排他们作为起始页面的缩略图。我认为这是最好的方法。除此之外,除了favicon外,没有标准化的方式。您可以扫描标题区域的页面,并尝试查找其中通常最左侧最大的图像,这应该是网站的徽标。您可以分析最流行的CMS和博客软件,以了解一些常见的徽标标记或排列模式。这也是相关的:http://googlewebmastercentral.blogspot.com/2013/05/using-schemaorg-markup-for-organization.html – tiguchi

+0

@Nobu,我可以从webView获取快照,但问题是,当我们显示多个在移动设备上拍摄快照没有多大意义。此外,我必须保存移动设备上所有访问页面的快照。如果在大多数情况下最左边最大的图像可能是标志,我会尝试。 – Harish

+0

你需要浏览器历史列表的这些标志或图标吗?您仍然可以裁剪和缩小这些屏幕截图,并创建与Android任务切换器类似的视觉效果。但是,如果徽标检测适用于您,那也很好。如果浏览器无法检测到徽标,则只需要某种回退行为 – tiguchi

回答

36

您可以自己编写代码或使用现有解决方案。

做它自己的算法

  1. 查找代码中的苹果触摸图标的声明,如<link rel="apple-touch-icon" href="/apple-touch-icon.png">。这些图片的范围从57x57到152x152。请参阅Apple specs以获取完整参考。
  2. 即使您找不到Apple触摸图标声明,仍尝试根据Apple命名约定加载它们。例如,你可能会在/apple-touch-icon.png找到一些东西。再次参见Apple specs以供参考。
  3. 在代码中寻找高清PNG图标,例如<link rel="icon" type="image/png" href="/favicon-196x196.png" sizes="196x196">。在这个例子中,你有一张196x196的图片。
  4. 寻找Windows 8/IE10和Windows 8.1/IE11平铺图片,例如<meta name="msapplication-TileImage" content="/mstile-144x144.png">。这些图片的范围从70x70到310x310,甚至更多。请参阅这些Windows 8Windows 8.1参考。
  5. 寻找/browserconfig.xml,致力于Windows 8.1/IE11。这是另一个你可以找到平铺图片的地方。见Microsoft specs
  6. 查找og:image声明,如<meta property="og:image" content="http://somesite.com/somepic.png"/>。这是一个网站如何表示FB/Pinterest /无论表示它的首选图片。请参阅Open Graph Protocol以供参考。
  7. 在这一点上,你发现没有合适的标志......该死!你仍然可以加载页面中的所有图片,并猜测选择最好的一张。

注意:第1步,第2步和第3步基本上是Chrome为书签和主屏幕链接获取适当图标的操作。通过歌剧海岸甚至使用MS瓷砖图片完成工作。阅读此列表以找出which browser uses which picture(完全披露:我是本页的作者)。

API和开源项目

RealFaviconGenerator:你可以得到这个favicon retrieval API任何网站图标或相关图标(如触摸图标)。充分披露:我是这项服务的作者。

BestIcon:虽然不太全面,但Besticon提供了一个很好的选择,特别是如果你想自己托管代码。还有一个你可以立即使用的hosted version

+0

非常好!你知道任何PHP实现的地方吗? –

+0

不,对不起: -/ –

+0

你有可能为此写一个java类吗?与Jsoup说,所以给了一个URL,有人可以提取标志?我被困在第5步 – learner

-1

通常favicon很小(如16x16或32x32)。如果你需要更大的尺寸,请提取不喜欢的图标,但从主页/标题标识。

+0

徽标是否始终保存在标题中?如果一个网页包含多个图片元素,我们如何知道哪个元素对应于该徽标? – Harish

+0

@Harish现代浏览器会自动检测放置在根目录中的图标,并且您不能在网站上包含favicon代码。如果favicon在您的网站上,那么只需输入更高分辨率的图片。 – Justinas

-1

徽标不会一致地被命名并且很难一致地识别。考虑将favicon放在合适尺寸的彩色瓷砖上。人们会很快将颜色与网站相关联。你可以从网站上提取一个主色,或者使用像colorthief这样的favicon来提取主色,或者使用金色角度公式选择一个色调来使每个主色独一无二。

11

https://github.com/mat/besticon的Go代码试图解决这个问题。

例如

$ besticon http://github.com 
http://github.com: https://github.com/apple-touch-icon-144.png 

也有代码的一个伴随托管版本,参见例如http://icons.better-idea.org/icons?url=github.com

(声明:我写的,因为我需要解决同样的问题前一段时间)

+0

有没有简单的方法来在Java中使用这段代码?有点像'ScriptEngine' – learner

+0

我还没有看过在其他环境中使用Go代码的可能性/可行性。这就是说我相信从Java使用这种方法的最简单的方法是使用使用Java的HTTP客户端提供的URL API。 – mat

+0

Jiahaog在这里[这里]有一个javascript实现(https://github.com/jiahaog/page-icon)。 – Qix