sql >> Database teknologi >  >> RDS >> Oracle

konvertere billede i hukommelsen til en klat

java.awt.Image er ret simpelt. Det giver ingen måde, hvorpå billedet kan skrives/gemmes, og det giver heller ikke nogen måde at få adgang til underliggende pixeldata for billedet.

Det første trin er at konvertere java.awt.Image til noget, der ImageIO kan støtte. Dette vil tillade dig at skrive billeddataene ud...

ImageIO kræver et RenderedImage da det er den primære billedkilde. BufferedImage er den eneste implementering af denne grænseflade i standardbibliotekerne...

Desværre er der ingen enkel metode til at konvertere fra den ene til den anden. Heldigvis er det ikke for 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();

Grundlæggende maler dette bare det originale java.awt.ImageBufferedImage

Dernæst skal vi gemme billedet på en eller anden måde, så det kan producere en InputStream ...

Dette er lidt mindre end optimalt, men får arbejdet 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());

Grundlæggende skriver vi billedet ud til en ByteArrayOutputStream og bruge resultatet til at generere en ByteArrayInputStream

Nu. Hvis hukommelsen er et problem, eller billedet er ret stort, kan du først skrive billedet til en File og læs derefter File tilbage via en form for InputStream i stedet...

Til sidst indstiller vi InputStream til den ønskede kolonne...

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

Og Blob er din onkel...



  1. MySQL:Bestem tabellens primære nøgle dynamisk

  2. SQL Server (MSSQL DBA) Databasevejledninger for begyndere, databaseadministratorer

  3. mysql ERKLÆRER MENS uden for lagret procedure hvordan?

  4. MySQL langsom forespørgselslog logføring af hurtige forespørgsler