Java 有没有办法通过编程方式从网站URL获取徽标图标?
我在创建一个活动的过程中,我将显示其标志和别名的用户选择访问的网站列表 e、 gJava 有没有办法通过编程方式从网站URL获取徽标图标?,java,android,xml,layout,webview,Java,Android,Xml,Layout,Webview,我在创建一个活动的过程中,我将显示其标志和别名的用户选择访问的网站列表 e、 g 最近访问的网站 logo1网站1/别名 logo2网站2/别名 。所以不 问题是,(参考附图)如何在http://左侧显示网站徽标 它被称为favicon,您所要做的就是: 如果/favicon.ico上有图标,请使用该图标 否则,获取页面内容,并从中提取位置。您需要使用HTML解析器,找到带有图标或快捷方式图标的rel 使用本网站: https://besticon-demo.herokuapp.com/a
- 最近访问的网站 logo1网站1/别名 logo2网站2/别名 。所以不
它被称为favicon,您所要做的就是:
/favicon.ico
上有图标,请使用该图标
中提取位置。您需要使用HTML解析器,找到带有图标
或快捷方式图标
的rel
https://besticon-demo.herokuapp.com/allicons.json?url=www.stackoverflow.com
它将找到一个网站的所有徽标,大小不同,并返回一个漂亮的json字符串,其中包含元数据,包括指向图标的url。您只需将www.stackoverflow.com
替换为您的域即可
如果您愿意,该网站还有一个gui,可用于手动输入网站:
https://besticon-demo.herokuapp.com/
以下是查询堆栈溢出网站返回的示例字符串:
{
"url":"www.stackoverflow.com",
"icons":[
{
"url":"http://stackoverflow.com/apple-touch-icon.png",
"width":158,
"height":158,
"format":"png",
"bytes":3445,
"error":null,
"sha1sum":"c78bd457575a3221c6b3d0d17ffb00ffc63d7cd0"
},
{
"url":"http://cdn.sstatic.net/Sites/stackoverflow/img/favicon.ico?v=4f32ecc8f43d",
"width":32,
"height":32,
"format":"ico",
"bytes":5430,
"error":null,
"sha1sum":"4f32ecc8f43d0986b9c6ce9f37999e86c0b829ef"
},
{
"url":"http://stackoverflow.com/favicon.ico",
"width":32,
"height":32,
"format":"ico",
"bytes":5430,
"error":null,
"sha1sum":"4f32ecc8f43d0986b9c6ce9f37999e86c0b829ef"
}
]
}
尝试使用以下代码:
imageview1.setImageBitmap(webview1.getFavicon());
此方法可用于获取Favicon图标位图
private Bitmap fetchFavicon(Uri uri) {
final Uri iconUri = uri.buildUpon().path("favicon.ico").build();
Log.i(TAG, "Fetching favicon from: " + iconUri);
InputStream is = null;
BufferedInputStream bis = null;
try
{
URLConnection conn = new URL(iconUri.toString()).openConnection();
conn.connect();
is = conn.getInputStream();
bis = new BufferedInputStream(is, 8192);
return BitmapFactory.decodeStream(bis);
} catch (IOException e) {
Log.w(TAG, "Failed to fetch favicon from " + iconUri, e);
return null;
}
}
下面是一个python库,它试图从URL推断徽标图像: 它在url处解析HTML,并尝试一系列操作,包括:
- 带有itemprop=“image”或property=“image”的元标记
- 元标记 property=“og:image:secure\u url”或property=“og:image”
- 元标记 name=“twitter:image”
- Microsoft互动程序的元标记,带有:name=“msapplication-wide310x150logo”,name=“msapplication-square310x310logo”,name=“msapplication-square150x150logo”,name=“msapplication-square70x70logo”
- 使用rel=“apple touch icon”链接标签
- 使用rel=“icon”链接标签
- 尝试“{scheme}://{domain}/favicon.ico”以查看它是否存在
- 否则,拉出第一个img标签(h1旁边)
- 使用此
您甚至可以自定义以获得特定的大小和缩放版本
我知道我迟到了,但此API将帮助其他人 Android不支持favicon文件。你可以拿来法维康,但不能展示/使用它 但谷歌提供了免费的API来获取图像格式的favicon
使用毕加索在imageview中显示图标。非常感谢您的建议,我将实施并让您知道我的发现-BestI是在谷歌为这种方法提供的url的帮助下实现的。去拿法维康。仍在努力使背景透明,因为其中一些是白色的BKG,另一个是黑色的。不知道如何动态处理这些背景@minitTech感谢您的帮助它让我开始了。@屏蔽您的代码它正在工作,但图标较小。您知道我如何使其变大,并且不会破坏favicon的大小吗。@JackFairfield如何获得此图标并在
ImageView
中显示Glide
网站将于2020年8月关闭。这是一个很棒的家伙。谢谢在新的API
中,conn.connect
将使应用程序崩溃。您有什么新建议吗?非常感谢:)在进行网络操作时,请始终使用AsyncTask。