5

我正在使用 android 并尝试从 ImageView 上的网站下载和显示 favicon(.ICO)。

到目前为止,我已经设法使用 HTTP 连接从网站读取 .ico,并将其作为 InputStream 检索。然后我使用 BitmapFactory 将流解码为 Bitmap 并将其显示在 ImageView 上。这是代码:

 public Bitmap getBitmapFromURL(URL src) {           
        try {

            URL url = new URL("http", "www.google.com", "/favicon.ico");

            HttpURLConnection connection = (HttpURLConnection) url.openConnection();                

            connection.setDoInput(true);       

            connection.connect();               

            InputStream input = connection.getInputStream();    

            BitmapFactory.Options options = new BitmapFactory.Options();

            Bitmap myBitmap = BitmapFactory.decodeStream(input, null, options);  

            return myBitmap;

        } catch (IOException e) {               
            e.printStackTrace();                
            return null;                
        }
    }

问题是 inputStream 的解码总是返回一个小的 16x16 Bitmap。如果我很好理解的话,一个 .ICO 文件可以存储不同的图像分辨率,例如 32x32 和 64x64。我的问题是,有没有办法解码 32x32 或 64x64 位图而不是 16x16?

另外,如果 BitmapFactory 没有解决方案,是否有库或 java 代码可以做到这一点?

注意:我不想调整位图的大小,我想要一个 32x32(或更大)的分辨率,而不会因拉伸而损失图像质量。

提前致谢。

4

2 回答 2

2

我知道这个问题是 3 年前提出的,但我遇到了同样的问题,并将 image4j 的一部分改编成 ico4a,你可以在这里找到:https ://github.com/divStar/ico4a (我自己写的,因为我想从 favicon 加载最大的图像;因为 image4j 使用 AWT 类,这对 android 来说不容易获得,所以我做了它,所以 ico4a 主要使用原生 android 类)。

它可以将大多数有效的 ICO 文件解码为位图对象列表。我相信无论是库本身还是示例应用程序都有检索最大位图对象的方法。

但是,我的图书馆无法编写 ICO 文件;它只能读取它们。您可以使用一些内置的 android 功能轻松地将单个图像保存为 PNG 或 JPEG 图形。

于 2016-09-26T14:13:58.620 回答
1

favicon 文件可能包含多个图标,通常一个为 16x16,一个为 32x32。这在以下线程中进行了讨论:How to have multiple favicon size,但默认情况下只提供 16x16?

Google 的 favico 就是这种情况。如果您尝试下载文件www.google.com/favicon.ico并使用IrfanView之类的应用程序打开它,您会看到有两个图标(16x16 和 32x32)。

要回答您的问题,您应该使用适当的库来提取多个图标,例如image4j,然后选择您需要的那个。

http://image4j.sourceforge.net/

于 2013-09-11T09:47:10.387 回答