2012-06-18 64 views
14

所以我在做一個應用程序的快捷方式存儲所有用戶的喜愛的應用程序,作用有點像一個樞紐。我可以支持實際的文件,並且我有一個快捷方式的解析器.lnk。我認爲應用程序支持Internet快捷方式也是相當不錯的。這是我在做什麼:如何從使用Java的網站獲取favicon.ico?

假設我試圖得到Google's iconhttp://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格式?
  2. 爲什麼ImageIO無法從URL看?

預先感謝您!

+0

[如果沒有註冊的ImageReader聲稱能夠讀取得到的流,則返回空。](http://docs.oracle.com/javase/6/docs/api/javax/imageio/ImageIO。html) –

+0

@HunterMcMillen不,你能解釋一下嗎? – mattbdean

+0

你確定'getBaseURL()'刪除了最後一個字符串嗎?如果沒有,您正試圖從www.google.com //favicon.ico獲取圖片。 – 11684

回答

10

嘗試Image4J

由於這種快速斯卡拉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] = [[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

回答您的問題:是否支持Java ICO?似乎並不喜歡它:

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

java.lang.IllegalArgumentException: Empty region! 

爲什麼ImageIO無法從URL看?那麼,URL本身似乎適用於我,所以你可能有代理/防火牆問題,或者它可能是上面的問題。

+0

謝謝!那個圖書館真的很棒! – mattbdean

+0

這是一種樂趣:) – opyate

+0

@opyate這是一個[bug](Java)中的[bug](http://bugs.sun.com/view_bug.do;jsessionid=cf757a2e4d6ffffffff9113c0c3c674747?bug_id=6633448)。 ImageIO類嘗試將'WBMPImageReader'用作ico分析器,但失敗。這個問題記錄了一些其他格式(例如.mov)。根據錯誤報告,問題從7(b63)確定。解決方法是禁用'WBMPImageReader'。 – user845279

3

你不需要的ImageIO這一點。只需複製字節,與任何其他靜態資源相同。

4

舊的職位,但以供將來參考:

我已經寫了ImageIO的一個插件,它添加了圖標(MS Windows圖標)和.CUR(微軟Windows光標)格式的支持。

您可以從GitHub這裏得到它:https://github.com/haraldk/TwelveMonkeys/

之後,你有installed插件,你應該能夠讀取該圖標,使用原來的職位代碼無需做任何修改。

+0

你的圖書館是驚人的,我今天發現它哇! – GOXR3PLUS