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