17

あいまいなタイトルで申し訳ありませんが、ここにあるキーワードがわかりません。セットアップは非常に簡単です。次のコマンドで画像を開きます

ImageIO.read(new File(filename));

これはほとんどのファイルで機能しますが、IllegalArgumentException with the detail: "numbers of source Raster bands and source color space components do not match". この画像は有効な Flickr の URL で wget を介して取得されたもので、この方法で取得した他の画像を使用したので、画像を取得する方法は原則として正しいようです。何が例外を引き起こしているのかわかりません。

回避策は許容範囲を超えています-私はImageIO特に使用に悩まされておらず、画像は視覚的にきれいに見えます。Javaがおかしくなることなく読み取られるようにする必要があります。

問題の画像は次のとおりです。

ここに画像の説明を入力

4

3 に答える 3

12

だから私はこれと同じ問題を抱えていて、画像がグレースケールであり、画像のメタデータが期待どおりではなかったため、デフォルトの ImageIO.read 実装がそれを理解していないことがわかりました。メインの読み込みに失敗した場合、「BufferedImage.TYPE_BYTE_GRAY」として読み込みを再試行する回避策を書きました。

            Iterator<ImageReader> iter = ImageIO.getImageReaders(stream);

        Exception lastException = null;
        while (iter.hasNext()) {
            ImageReader reader = null;
            try {
                reader = (ImageReader)iter.next();
                ImageReadParam param = reader.getDefaultReadParam();
                reader.setInput(stream, true, true);
                Iterator<ImageTypeSpecifier> imageTypes = reader.getImageTypes(0);
                while (imageTypes.hasNext()) {
                    ImageTypeSpecifier imageTypeSpecifier = imageTypes.next();
                    int bufferedImageType = imageTypeSpecifier.getBufferedImageType();
                    if (bufferedImageType == BufferedImage.TYPE_BYTE_GRAY) {
                        param.setDestinationType(imageTypeSpecifier);
                        break;
                    }
                }
                bufferedImage = reader.read(0, param);
                if (null != bufferedImage) break;
            } catch (Exception e) {
                lastException = e;
            } finally {
                if (null != reader) reader.dispose();               
            }
        }
        // If you don't have an image at the end of all readers
        if (null == bufferedImage) {
            if (null != lastException) {
                throw lastException;
            }
        }
于 2012-07-20T00:19:15.063 に答える
4

エラー メッセージは参考情報であり、ICC カラー プロファイルに記載されているラスター バンドの数が正しくないように思われることを示しています。ImageMagickを使用して、画像から ICC プロファイルを取り除きました。その後、ImageIO は画像の読み取りに問題はありません (~1k の不良画像)。それが役立つことを願っています。

于 2013-03-27T06:33:31.440 に答える