sql >> Databáze >  >> RDS >> Oracle

převod obrázku v paměti na blob

java.awt.Image je docela jednoduše. Neposkytuje žádné prostředky, kterými lze obrázek zapisovat/ukládat, ani neposkytuje žádné prostředky pro získání přístupu k podkladovým pixelovým datům obrázku.

Prvním krokem je převod java.awt.Image na něco, co ImageIO může podporovat. To vám umožní vypsat obrazová data...

ImageIO vyžaduje RenderedImage jako primární zdroj obrazu. BufferedImage je jedinou implementací tohoto rozhraní v rámci výchozích knihoven...

Bohužel neexistuje žádná jednoduchá metoda pro převod z jednoho na druhý. Naštěstí to není příliš těžké.

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

V podstatě to jen vykreslí původní java.awt.Image na BufferedImage

Dále musíme obrázek nějakým způsobem uložit, aby mohl vytvářet InputStream ...

To je o něco méně než optimální, ale funguje to.

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

V podstatě zapíšeme obrázek do ByteArrayOutputStream a výsledek použijte ke generování ByteArrayInputStream

Nyní. Pokud je problém s pamětí nebo je obrázek poměrně velký, můžete obrázek nejprve zapsat do File a pak si jednoduše přečtěte File zpět přes nějaký druh InputStream místo toho...

Nakonec nastavíme InputStream do požadovaného sloupce...

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

A Blob je tvůj strýc...



  1. Přidejte předponu k automatickému přírůstku v mysql db

  2. Jak dynamicky mapovat vstupní a výstupní sloupce v SSIS?

  3. Proč nelze vytvořit tabulku oddílů

  4. Vyberte z tabulky pomocí odkazu z propojené tabulky (Připojit se v rámci spojení?)