50

BufferedImage オブジェクトから InputStream を取得するにはどうすればよいですか? これを試しましたが、 ImageIO.createImageInputStream() は常に NULL を返します

BufferedImage bigImage = GraphicsUtilities.createThumbnail(ImageIO.read(file), 300);
ImageInputStream bigInputStream = ImageIO.createImageInputStream(bigImage);

bigImageJPanelに正常にペイントできるため、画像のサムネイルが正しく生成されています。

4

3 に答える 3

96

http://usna86-techbits.blogspot.com/2010/01/inputstream-from-url-bufferedimage.htmlから

それは非常にうまく動作します!

BufferedImage の InputStream を作成する方法は次のとおりです。

URL url = new URL("http://www.google.com/intl/en_ALL/images/logo.gif");
BufferedImage image = ImageIO.read(url);
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(image, "gif", os);
InputStream is = new ByteArrayInputStream(os.toByteArray());
于 2011-03-04T14:15:39.020 に答える
13

画像をファイルに保存しようとしている場合は、次を試してください。

ImageIO.write(thumb, "jpeg", new File(....));

バイトだけが必要な場合は、書き込み呼び出しを実行してみますが、ByteArrayOutputStream を渡します。これにより、バイト配列を取得して、必要な処理を行うことができます。

于 2009-03-16T03:52:35.303 に答える
8

method をオーバーライドし、 (コピーではなく) それ自体toByteArray()を返すbufことで、メモリ関連の問題を回避できます。これは同じ配列を共有し、正しいサイズの別の配列を作成しません。重要なことはsize()、配列への有効なバイト数を制御するためにメソッドを使用することです。

final ByteArrayOutputStream output = new ByteArrayOutputStream() {
    @Override
    public synchronized byte[] toByteArray() {
        return this.buf;
    }
};
ImageIO.write(image, "png", output);
return new ByteArrayInputStream(output.toByteArray(), 0, output.size());
于 2012-09-03T19:21:52.440 に答える