Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

mengonversi Gambar dalam memori menjadi Blob

java.awt.Image cukup sederhana. Ini tidak menyediakan cara apa pun untuk menulis/menyimpan gambar, juga tidak menyediakan cara apa pun untuk mendapatkan akses ke data piksel yang mendasari gambar.

Langkah pertama, konversi java.awt.Image untuk sesuatu yang ImageIO bisa mendukung. Ini akan memungkinkan Anda untuk menulis data gambar...

ImageIO membutuhkan RenderedImage sebagai sumber gambar utama. BufferedImage adalah satu-satunya implementasi antarmuka ini dalam pustaka default...

Sayangnya, tidak ada metode sederhana untuk mengkonversi dari satu ke yang lain. Untungnya, tidak terlalu sulit.

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

Pada dasarnya, ini hanya mengecat java.awt.Image asli ke BufferedImage

Selanjutnya, kita perlu menyimpan gambar dengan cara tertentu sehingga dapat menghasilkan InputStream ...

Ini sedikit kurang optimal, tetapi menyelesaikan pekerjaan.

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

Pada dasarnya, kami menulis gambar ke ByteArrayOutputStream dan gunakan hasilnya untuk menghasilkan ByteArrayInputStream

Sekarang. Jika memori bermasalah atau gambar agak besar, Anda dapat menulis gambar terlebih dahulu ke File dan kemudian cukup membaca File kembali melalui semacam InputStream sebagai gantinya...

Terakhir, kita atur InputStream ke kolom yang diperlukan...

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

Dan Blob adalah pamanmu...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bandingkan baris ke-n dengan baris ke-n+1 dan jika terletak pada kisaran baris ke-n, cetak n+1 baris USNG ORACLE QUERY

  2. Bagaimana cara saya mengisi tanggal yang hilang berdasarkan grup di Oracle

  3. Oracle PL/SQL:Buat Paket DML Online

  4. Tidak dapat menemukan prosedur dalam tampilan DBA_PROCEDURES

  5. Oracle:Bagaimana cara menentukan nama BARU suatu objek dalam pemicu AFTER ALTER?