Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.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
Java 有没有办法通过编程方式从网站URL获取徽标图标?_Java_Android_Xml_Layout_Webview - Fatal编程技术网

Java 有没有办法通过编程方式从网站URL获取徽标图标?

Java 有没有办法通过编程方式从网站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

我在创建一个活动的过程中,我将显示其标志和别名的用户选择访问的网站列表

e、 g

  • 最近访问的网站

    logo1网站1/别名

    logo2网站2/别名

    。所以不

问题是,(参考附图)如何在http://左侧显示网站徽标


它被称为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。