2012-06-18 16 views
14

Tak więc tworzę aplikację do przechowywania skrótów do wszystkich ulubionych aplikacji użytkownika, działając jak hub. Mogę mieć wsparcie dla rzeczywistych plików i mam parser .lnk dla skrótów. Pomyślałem, że byłoby całkiem dobrze, gdyby aplikacja obsługiwała skróty internetowe. Oto, co robię:Jak uzyskać favicon.ico ze strony internetowej za pomocą Java?

Załóżmy, że próbuję uzyskać Google's icon (http://www.google.com/favicon.ico).

  1. zacznę przez pozbycie się dodatkowych stron (np www.google.com/anotherpage staną www.google.com.

  2. Następnie używam ImageIO.read(java.net.URL) aby uzyskać obraz.

Problem polega na tym, że ImageIO Nigdy nie zwraca obrazu po wywołaniu tej metody:

Teraz mam dwa pytania:

  1. Czy Java obsługuje formatu ICO, mimo że jest z firmy Microsoft?
  2. Dlaczego ImageIO nie odczytuje adresu URL?

Z góry dziękuję!

+0

[Jeśli żaden zarejestrowany ImageReader nie twierdzi, że można odczytać wynikowy strumień, zwracana jest wartość null.] (Http://docs.oracle.com/javase/6/docs/api/javax/imageio/ImageIO.html) –

+0

@HunterMcMillen Nie, możesz to wyjaśnić? – mattbdean

+0

czy jesteś pewien, że 'getBaseURL()' również usuwa ostatni ciąg? Jeśli nie, próbujesz uzyskać obraz z www.google.com//favicon.ico. – 11684

Odpowiedz

10

Wypróbuj Image4J.

Jak Ten szybki pokazy sesji Scala rEPL (wklej-stanie jak kod 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] = [[email protected]: 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] 

UPDATE

Aby odpowiedzieć na Twoje pytania: nie obsługuje Java ICO? Nie wydaje się podoba:

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

java.lang.IllegalArgumentException: Empty region! 

Dlaczego ImageIO nie czytać z adresu URL? Cóż, URL wydaje się działać dla mnie, więc możesz mieć problem z proxy/zaporą, lub może to być problem powyżej.

+0

Dziękujemy! Ta biblioteka jest naprawdę dobra! – mattbdean

+0

To przyjemność :) – opyate

+0

@opiate Jest to błąd (http://bugs.sun.com/view_bug.do;jsessionid=cf757a2e4d6ffffffff9113c0c3c674747?bug_id=6633448) w Javie. Klasa ImageIO próbuje użyć 'WBMPImageReader' jako analizatora ico, ale kończy się niepowodzeniem. Problem jest udokumentowany kilkoma innymi formatami (na przykład .mov). Zgodnie z raportem o błędzie, problem został naprawiony od 7 (b63). Obejściem było wyłączenie 'WBMPImageReader'. – user845279

3

Do tego nie potrzebujesz programu ImageIO. Po prostu skopiuj bajty, tak jak w przypadku każdego innego statycznego zasobu.

4

Stary post, ale na przyszłość:

Pisałem plugin do ImageIO który dodaje wsparcie dla ICO (ikony) MS Windows i MS Windows .CUR (kursor) formatach.

Można go pobrać z GitHub tutaj: https://github.com/haraldk/TwelveMonkeys/

Po masz installed wtyczki, powinieneś być w stanie odczytać ikonę, przy użyciu kodu z oryginalnego postu bez jakichkolwiek modyfikacji.

+0

Twoja biblioteka jest niesamowita znalazłem ją dzisiaj wow! – GOXR3PLUS

Powiązane problemy