如何从使用Java的网站获取网站图标.ico?

2022-09-03 01:59:37

因此,我正在制作一个应用程序来存储所有用户最喜欢的应用程序的快捷方式,其作用有点像集线器。我可以支持实际文件,并且我有一个用于快捷方式的解析器。我认为应用程序支持Internet快捷方式也会很好。这就是我正在做的:.lnk

假设我正在尝试获取 Google 的图标 ()。http://www.google.com/favicon.ico

  1. 我从摆脱多余的页面开始(例如 会变成 .www.google.com/anotherpagewww.google.com

  2. 然后,我用来获取图像。ImageIO.read(java.net.URL)

问题是,当我调用此方法时,永远不会返回图像:ImageIO

String trimmed = getBaseURL(page); //This removes the extra pages
Image icon = null;    
try {
    String fullURLString = trimmed + "/favicon.ico";
    URL faviconURL = new URL(fullURLString);
    icon = ImageIO.read(faviconURL);
} catch (IOException e) {
    e.printStackTrace();
}

return icon;

现在我有两个问题:

  1. Java是否支持ICO格式,即使它来自Microsoft?
  2. 为什么无法从 URL 读取?ImageIO

提前感谢您!


答案 1

试试 Image4J

正如这个快速的 Scala REPL 会话所示(可粘贴为 Java 代码):

> net.sf.image4j.codec.ico.ICODecoder.read(new java.net.URL("http://www.google.com/favicon.ico").openStream())

res1: java.util.List[java.awt.image.BufferedImage] = [BufferedImage@65712a80: type = 2 DirectColorModel: rmask=ff0000 gmask=ff00 bmask=ff amask=ff000000 IntegerInterleavedRaster: width = 16 height = 16 #Bands = 4 xOff = 0 yOff = 0 dataOffset[0] 0]

更新

回答你的问题:Java支持ICO吗?似乎不像:

> javax.imageio.ImageIO.read(new java.net.URL("http://www.google.com/favicon.ico"))

java.lang.IllegalArgumentException: Empty region!

为什么无法从 URL 读取?好吧,URL本身似乎对我有用,因此您可能遇到代理/防火墙问题,或者可能是上面的问题。ImageIO


答案 2

旧帖子,但供将来参考:

我为ImageIO编写了一个插件,该插件添加了对.ICO (MS Windows Icon) 和 .CUR(MS Windows Cursor)格式。

你可以从GitHub这里得到它:https://github.com/haraldk/TwelveMonkeys/

安装插件后,您应该能够使用原始帖子中的代码阅读图标,而无需进行任何修改。


推荐