Bagaimana untuk Menukar BufferedInputStream daripada Pangkalan Data kepada BufferedImage?

Mary-Kate Olsen
Lepaskan: 2024-11-13 09:47:02
asal
148 orang telah melayarinya

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

Menukar BufferedInputStream kepada Imej

Masalah:

Bagaimana saya boleh menukar objek BufferedInputStream, yang diambil daripada pangkalan data, ke dalam BufferedImage? Kod sedia ada mengembalikan imej nol.

Penyelesaian:

  1. Sahkan bahawa BufferedInputStream mengandungi imej yang sah. Simpannya pada fail dan kemudian baca semula sebagai BufferedImage untuk mengesahkan.
  2. Pastikan panjang Blob yang betul digunakan apabila mendapatkan bait. Untuk pangkalan data H2, panjang dikembalikan sebagai panjang, tetapi Blob#getBytes menjangkakan int.
  3. Sebagai alternatif, gunakan Blob#getBinaryStream dan bukannya Blob#getBytes. Ini mungkin perlu jika pangkalan data tidak menyimpan kandungan Blob dalam ingatan.

Contoh:

Kod Java berikut menggunakan Blob#getBinaryStream untuk membaca imej daripada pangkalan data dan tukarkannya kepada 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;
    }

}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Menukar BufferedInputStream daripada Pangkalan Data kepada BufferedImage?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan