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

BufferedInputStream をデータベースから BufferedImage に変換するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-13 09:47:02146ブラウズ

How to Convert a BufferedInputStream from a Database to a BufferedImage?

BufferedInputStream を画像に変換する

問題:

データベースから取得した BufferedInputStream オブジェクトを変換するにはどうすればよいですか? BufferedImage に変換しますか?既存のコードは null イメージを返します。

解決策:

  1. BufferedInputStream に有効なイメージが含まれていることを確認します。ファイルに保存し、確認のために BufferedImage として読み戻します。
  2. バイトを取得するときに正しい長さの Blob が使用されていることを確認してください。 H2 データベースの場合、長さは long として返されますが、Blob#getBytes は int を予期します。
  3. または、Blob#getBytes の代わりに Blob#getBinaryStream を使用します。これは、データベースが Blob コンテンツをメモリに保存しない場合に必要になる場合があります。

例:

次の Java コードは、Blob#getBinaryStream を使用してイメージを読み取ります。データベースから取得して BufferedImage に変換します:

import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.imageio.ImageIO;

public class ImageDatabaseHelper {

    private Connection con;

    public BufferedImage loadImage(int imageId) throws IOException, SQLException {

        PreparedStatement stmt = null;
        ResultSet rs = null;
        BufferedImage image = null;

        try {

            stmt = con.prepareStatement("select image from images where id = ?");
            stmt.setInt(1, imageId);
            rs = stmt.executeQuery();

            while (rs.next()) {

                Blob blob = rs.getBlob(1);
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                try (ByteArrayInputStream bais = new ByteArrayInputStream(blob.getBinaryStream())) {
                    ImageIO.read(bais).writeTo(baos);
                }
                image = ImageIO.read(new ByteArrayInputStream(baos.toByteArray()));
            }

        } finally {
            try {
                rs.close();
            } catch (Exception e) {
            }
            try {
                stmt.close();
            } catch (Exception e) {
            }
        }

        return image;
    }

}

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

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