java.awt.Image
काफी सरल है। यह कोई ऐसा साधन प्रदान नहीं करता है जिसके द्वारा छवि को लिखा/सहेजा जा सके और न ही यह छवि के अंतर्निहित पिक्सेल डेटा तक पहुंच प्राप्त करने का कोई साधन प्रदान करता है।
पहला कदम, java.awt.Image
. को कनवर्ट करना है किसी ऐसी चीज़ के लिए जो ImageIO
संभाल सकना। यह आपको छवि डेटा को बाहर लिखने की अनुमति देगा...
ImageIO
एक RenderedImage
requires की आवश्यकता है क्योंकि यह प्राथमिक छवि स्रोत है। BufferedImage
डिफ़ॉल्ट पुस्तकालयों के भीतर इस इंटरफ़ेस का एकमात्र कार्यान्वयन है...
दुर्भाग्य से, एक से दूसरे में कनवर्ट करने का कोई आसान तरीका नहीं है। सौभाग्य से, यह कठिन नहीं है।
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();
मूल रूप से, यह सिर्फ मूल java.awt.Image
. को पेंट करता है BufferedImage
. पर
इसके बाद, हमें इमेज को किसी तरह से सेव करना होगा ताकि यह एक InputStream
उत्पन्न कर सके ...
यह इष्टतम से थोड़ा कम है, लेकिन काम पूरा हो जाता है।
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());
मूल रूप से, हम इमेज को ByteArrayOutputStream
. पर लिखते हैं और एक ByteArrayInputStream
उत्पन्न करने के लिए परिणाम का उपयोग करें
अब। यदि स्मृति एक समस्या है या छवि काफी बड़ी है, तो आप पहले छवि को File
. पर लिख सकते हैं और उसके बाद बस File
पढ़ें किसी प्रकार के InputStream
. के माध्यम से वापस इसके बजाय...
अंत में, हम InputStream
. सेट करते हैं आवश्यक कॉलम में...
PreparedStatement stmt = null;
//...
stmt.setBlob(parameterIndex, bais);
और बूँद तुम्हारे चाचा...