sql >> Databasteknik >  >> RDS >> Oracle

konvertera bild i minnet till en blob

java.awt.Image är ganska enkelt. Det tillhandahåller inte något sätt på vilket bilden kan skrivas/sparas och det ger inte heller något sätt att få tillgång till underliggande pixeldata i bilden.

Det första steget är att konvertera java.awt.Image till något som ImageIO kan stödja. Detta gör att du kan skriva ut bilddata...

ImageIO kräver en RenderedImage eftersom det är den primära bildkällan. BufferedImage är den enda implementeringen av detta gränssnitt inom standardbiblioteken...

Tyvärr finns det ingen enkel metod för att konvertera från den ena till den andra. Lyckligtvis är det inte för svårt.

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();

I grund och botten målar detta bara den ursprungliga java.awt.ImageBufferedImage

Därefter måste vi spara bilden på något sätt så att den kan producera en InputStream ...

Detta är lite mindre än optimalt, men får jobbet gjort.

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());

I grund och botten skriver vi ut bilden till en ByteArrayOutputStream och använd resultatet för att generera en ByteArrayInputStream

Nu. Om minnet är ett problem eller om bilden är ganska stor kan du först skriva bilden till en File och läs sedan helt enkelt File tillbaka in via någon form av InputStream istället...

Slutligen ställer vi in ​​InputStream till önskad kolumn...

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

Och Blob är din farbror...



  1. det går inte att visa frågeresultat i en vykodantändare

  2. Hur WEEK() fungerar i MariaDB

  3. Complex Left Outer Joins i Oracle, konverterar till PostgreSQL

  4. Hämtar data från Mysql DB till listView med JSON och PHP