Heim  >  Artikel  >  Datenbank  >  Wie konvertiere ich einen BufferedInputStream aus einer Datenbank in ein BufferedImage?

Wie konvertiere ich einen BufferedInputStream aus einer Datenbank in ein BufferedImage?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-13 09:47:02149Durchsuche

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

Konvertieren von BufferedInputStream in ein Bild

Problem:

Wie kann ich ein aus einer Datenbank abgerufenes BufferedInputStream-Objekt konvertieren? in ein BufferedImage? Der vorhandene Code gibt ein Nullbild zurück.

Lösung:

  1. Stellen Sie sicher, dass der BufferedInputStream ein gültiges Bild enthält. Speichern Sie es in einer Datei und lesen Sie es dann zur Bestätigung als BufferedImage zurück.
  2. Stellen Sie sicher, dass beim Abrufen der Bytes die richtige Länge des Blobs verwendet wird. Für H2-Datenbanken wird die Länge als Long zurückgegeben, aber Blob#getBytes erwartet einen int.
  3. Alternativ können Sie Blob#getBinaryStream anstelle von Blob#getBytes verwenden. Dies kann erforderlich sein, wenn die Datenbank keine Blob-Inhalte im Speicher speichert.

Beispiel:

Der folgende Java-Code verwendet Blob#getBinaryStream, um ein Bild zu lesen aus der Datenbank und konvertieren Sie es in ein 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;
    }

}

Das obige ist der detaillierte Inhalt vonWie konvertiere ich einen BufferedInputStream aus einer Datenbank in ein BufferedImage?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn