BufferedImageオブジェクトからInputStreamを取得するにはどうすればよいですか?私はこれを試しましたが、ImageIO.createImageInputStream()は常にNULLを返します
BufferedImage bigImage = GraphicsUtilities.createThumbnail(ImageIO.read(file), 300);
ImageInputStream bigInputStream = ImageIO.createImageInputStream(bigImage);
bigImageをJPanelに正常にペイントできるため、画像のサムネイルが正しく生成されています。
ありがとうございました。
画像をファイルに保存しようとしている場合:
ImageIO.write(thumb, "jpeg", new File(....));
バイトだけが必要な場合は、write呼び出しを試して、ByteArrayOutputStreamを渡してください。これにより、バイト配列を取得して、必要な処理を実行できます。
から 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());
メソッド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());