17

そこで、ユーザーのお気に入りのすべてのアプリケーションへのショートカットを保存するアプリケーションを作成し、一種のハブのように機能させています。実際のファイルをサポートすることができ.lnk、ショートカット用のパーサーがあります。アプリケーションがインターネット ショートカットもサポートするのはかなり良いことだと思いました。これは私がやっていることです:

Google のアイコン( )を取得しようとしているとしますhttp://www.google.com/favicon.ico

  1. 余分なページを取り除くことから始めます (たとえばwww.google.com/anotherpagewww.google.com.

  2. 次に、ImageIO.read(java.net.URL)イメージを取得するために使用します。

問題は、ImageIOこのメソッドを呼び出したときに Image が返されないことです。

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;

今、私は2つの質問があります:

  1. Java はマイクロソフト製ですが、ICO 形式をサポートしていますか?
  2. ImageIOURL からの読み取りに失敗するのはなぜですか?

前もって感謝します!

4

4 に答える 4

11

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!

ImageIOURL からの読み取りに失敗するのはなぜですか? URL 自体は機能しているように見えるので、プロキシ/ファイアウォールに問題があるか、上記の問題である可能性があります。

于 2012-06-18T21:53:33.217 に答える
5

古い投稿ですが、今後の参考のために:

.ICO (MS Windows アイコン) および .CUR (MS Windows カーソル) 形式のサポートを追加する ImageIO 用のプラグインを作成しました。

こちらの GitHub から入手できます: https://github.com/haraldk/TwelveMonkeys/

プラグインをインストールすると、元の投稿のコードを変更せずに使用して、アイコンを読み取ることができるはずです。

于 2013-12-23T15:22:46.167 に答える