ホームページ  >  記事  >  データベース  >  BufferedInputStream Blob をデータベースから可視イメージに変換するにはどうすればよいですか?

BufferedInputStream Blob をデータベースから可視イメージに変換するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-09 21:22:02962ブラウズ

How to Convert a BufferedInputStream Blob from a Database into a Visible Image?

BufferedInputStream を画像に変換する

データベースから取得した BLOB を可視画像に変換しようとするときに問題が発生します。この特定のケースでは、Blob は BufferedInputStream として保存され、ImageIO.read 経由で画像に直接変換すると null が返されます。

問題への対処

  1. InputStream を検証します: Blob#getBytes メソッドが正しい値を返すことを確認します。 長さ。ファイルの内容が切り詰められていないことを確認してください。
  2. バイナリ データを正しく抽出します: Blob#getBytes の代わりに Blob#getBinaryStream を使用して、データベースの特定の特性を考慮してバイナリ データを取得します (例: 、H2).
  3. バイパスBufferedInputStream: ByteArrayOutputStream を作成し、バイナリ データを書き込むことで、BufferedInputStream をバイパスします。次に、ImageIO.read で使用する ByteArrayOutputStream から ByteArrayInputStream を作成します。

推奨されるコードの変更:

public BufferedImage getPhoto(Connection con) throws IOException, SQLException {
    Blob blob = getPhoto(con);
    BufferedImage image = null;
    byte[] data;
    
    try (ByteArrayOutputStream baos = new ByteArrayOutputStream();
         InputStream is = blob.getBinaryStream()) {
        
        int nRead;
        byte[] buffer = new byte[4096];
        while ((nRead = is.read(buffer, 0, buffer.length)) != -1) {
            baos.write(buffer, 0, nRead);
        }
        
        data = baos.toByteArray();
        image = ImageIO.read(new ByteArrayInputStream(data));
    } catch (SQLException | IOException e2) {
        e2.printStackTrace();
    }
    
    return image;
}

これらの変更を実装すると、Blob は次のようになります。正しく取得され、ByteArrayInputStream に変換され、次を使用して画像として読み取られます。 ImageIO.read.

以上がBufferedInputStream Blob をデータベースから可視イメージに変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。