View Full Version : [JAVA] Convertire un oggetto Image in oggetto Blob
fbcyborg
24-11-2009, 14:13
Qualcuno sa come convertire un oggetto di tipo Image in un oggetto di tipo Blob?
In rete ho trovato una soluzione, ma purtroppo è difettosa.
Oddio. Ho dato un'occhiata alla documentazione e mi pare una cosa strana. Image pare essere una classe astratta quindi al massimo intendi che il riferimento è di tipo Image ma avrà un oggetto di un sottotipo. E Blob è un'interfaccia. Boh, aspetta qualcuno che ne sa più di me :D
fbcyborg
24-11-2009, 15:56
In realtà un mezzo sistema c'è, solo che bisogna passare da Image a byte[] e da byte[] a blob, ma è un po' un casino perché con i metodi che ho trovato io, l'immagine non viene memorizzata correttamente nel DB.
fbcyborg, la soluzione che hai trovato in linea di principio non é sbagliata: tramite ImageIO devi serializzare l'immagine su di un ByteArrayOutputStream, poi prendi l'array di byte[] e lo passi a Blob.setBytes
dimenticavo, solo gli oggetti BufferedImage possono essere serializzati da ImageIO, quindi all'occorrenza dovrai fare un bel blit che ricopi l'immagine originale in un tuo oggetto BufferedImage.
fbcyborg
24-11-2009, 21:40
Alla fine ho risolto convertendo prima in byte[] e poi in Blob.
public static Blob ImageToBlob(BufferedImage i, String format){
return byteArrayToBlob(ImageToByte(i,format));
}
public static byte[] ImageToByte(BufferedImage image, String format){
BufferedImage img = image;
ByteArrayOutputStream baos = new ByteArrayOutputStream(1000);
byte[] result = null;
try {
ImageIO.write(img, format, baos);
baos.flush();
result = baos.toByteArray();
baos.close();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
private static Blob byteArrayToBlob(byte[] a){
Blob b = null;
if (a == null)
return null;
try {
b = new SerialBlob(a);
} catch (SQLException e) {
e.printStackTrace();
}
return b;
}
usando appunto BufferedImage.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.