sql >> Database >  >> RDS >> Oracle

afbeelding in geheugen converteren naar een Blob

java.awt.Image is vrij eenvoudig. Het biedt geen enkele manier waarop de afbeelding kan worden geschreven/opgeslagen en biedt ook geen enkele manier om toegang te krijgen tot onderliggende pixelgegevens van de afbeelding.

De eerste stap is het converteren van de java.awt.Image naar iets dat ImageIO kan ondersteunen. Hiermee kunt u de afbeeldingsgegevens wegschrijven...

ImageIO vereist een RenderedImage omdat het de primaire afbeeldingsbron is. BufferedImage is de enige implementatie van deze interface binnen de standaardbibliotheken...

Helaas is er geen eenvoudige methode om van de ene naar de andere te converteren. Gelukkig is het niet zo moeilijk.

Image img = ...;

BufferedImage bi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = bi.createGraphics();
g2d.drawImage(img, 0, 0, null);
g2d.dispose();

Kortom, dit schildert gewoon de originele java.awt.Image op de BufferedImage

Vervolgens moeten we de afbeelding op de een of andere manier opslaan zodat deze een InputStream kan produceren ...

Dit is iets minder dan optimaal, maar klaart de klus.

ByteArrayOutputStream baos = null;
try {
    baos = new ByteArrayOutputStream();
    ImageIO.write(bi, "png", baos);
} finally {
    try {
        baos.close();
    } catch (Exception e) {
    }
}
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());

In principe schrijven we de afbeelding naar een ByteArrayOutputStream en het resultaat gebruiken om een ​​ByteArrayInputStream . te genereren

Nutsvoorzieningen. Als geheugen een probleem is of de afbeelding vrij groot is, kunt u de afbeelding eerst naar een File schrijven en lees dan gewoon het File terug in via een soort InputStream in plaats daarvan...

Ten slotte stellen we de InputStream . in naar de gewenste kolom...

PreparedStatement stmt = null;
//...    
stmt.setBlob(parameterIndex, bais);

En Blob is je oom...



  1. Selecteer en toon alleen dubbele records in MySQL

  2. Meerdere records invoegen met pg-promise

  3. Meerdere woordenboekobjecten invoegen in een MySQL-database met behulp van python en MySQLdb

  4. scalaire subquery in if-statement Voorwaarde in PL/SQL