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...