Oracle
 sql >> Baza danych >  >> RDS >> Oracle

konwertowanie obrazu w pamięci do Blob

java.awt.Image jest po prostu. Nie zapewnia żadnych środków, za pomocą których można zapisać/zapisać obraz, ani nie zapewnia dostępu do podstawowych danych pikseli obrazu.

Pierwszym krokiem jest konwersja java.awt.Image do czegoś, co ImageIO może wspierać. Umożliwi to wypisanie danych obrazu...

ImageIO wymaga RenderedImage ponieważ jest to główne źródło obrazu. BufferedImage jest jedyną implementacją tego interfejsu w domyślnych bibliotekach...

Niestety nie ma prostej metody konwersji z jednego na drugie. Na szczęście nie jest to trudne.

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

Zasadniczo to po prostu maluje oryginalny java.awt.Image na BufferedImage

Następnie musimy w jakiś sposób zapisać obraz, aby mógł wygenerować InputStream ...

To trochę mniej niż optymalne, ale załatwia sprawę.

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

Zasadniczo zapisujemy obraz do ByteArrayOutputStream i użyj wyniku do wygenerowania ByteArrayInputStream

Ale już. Jeśli pamięć stanowi problem lub obraz jest dość duży, możesz najpierw zapisać obraz w File a następnie po prostu przeczytaj File z powrotem przez jakiś rodzaj InputStream zamiast tego...

Na koniec ustawiamy InputStream do wymaganej kolumny...

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

A Blob jest twoim wujem...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Proste zapytania rekurencyjne w Oracle

  2. Nieprawidłowy numer Oracle spowodowany przez funkcję to_char

  3. Oracle:ORA-12154:Problem z TNS:64-bitowy Excel/Windows 10 64-bitowy

  4. Zaktualizuj za pomocą wyzwalacza po wstawieniu na tym samym stole

  5. pl/sql - Używanie dynamicznego zapytania wewnątrz procedury składowanej