Как получить favicon.ico с веб-сайта с использованием Java?
поэтому я делаю приложение для хранения ярлыков для всех любимых приложений пользователя, действуя как концентратор. У меня может быть поддержка реальных файлов, и у меня есть .lnk
синтаксический анализатор для ярлыков. Я думал, что это будет довольно хорошо для приложения, чтобы поддерживать ярлыки в интернете, тоже. Вот что я делаю:--9-->
предположим, я пытаюсь получить значок Google (http://www.google.com/favicon.ico
).
Я начинаю с избавления от дополнительных страниц (например,
www.google.com/anotherpage
станетwww.google.com
.тогда я использую
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;
теперь у меня два вопроса:
- поддерживает ли Java формат ICO, даже если он от Microsoft?
- почему
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 для этого. Просто скопируйте байты, как и для любого другого статического ресурса.