Как получить favicon.ico с веб-сайта с использованием Java?

поэтому я делаю приложение для хранения ярлыков для всех любимых приложений пользователя, действуя как концентратор. У меня может быть поддержка реальных файлов, и у меня есть .lnk синтаксический анализатор для ярлыков. Я думал, что это будет довольно хорошо для приложения, чтобы поддерживать ярлыки в интернете, тоже. Вот что я делаю:--9-->

предположим, я пытаюсь получить значок Google (http://www.google.com/favicon.ico).

  1. Я начинаю с избавления от дополнительных страниц (например, www.google.com/anotherpage станет www.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. почему ImageIO не удается прочитать из URL?

спасибо заранее!

3 ответов


попробовать 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!

почему ImageIO не удается прочитать из URL? Ну, сам URL, кажется, работает для меня, поэтому у вас может быть проблема с прокси/брандмауэром, или это может быть проблема выше.


старый пост, но на будущее:

Я написал плагин для ImageIO, который добавляет поддержку .ICO (значок MS Windows) и .Форматы CUR (MS Windows Cursor).

вы можете получить его от GitHub здесь:https://github.com/haraldk/TwelveMonkeys/

после установлен плагин, вы должны иметь возможность читать значок, используя код в исходном сообщении без каких-либо изменений.


вам не нужно ImageIO для этого. Просто скопируйте байты, как и для любого другого статического ресурса.