9
votes

Comment puis-je convertir un objet bufferedImage en InputStream ou un blob?

J'essaie de stocker une image téléchargée par l'utilisateur dans la base de données avec un attribut LONGBLOB ... J'ai rencontré un problème avec un Paretstatement qui a deux méthodes Pour définir un blob qui sont:

VIDS Public Setbilararintream (Int paramètreIndex, InputStream X)

Public Void SetBlob (int paramètreindex, blob x)

Public Void Setblob (INT Parameterindex, InputStream InputStream)

Maintenant, le problème est que j'ai un bufferedimage qui doit être converti en blob ou introuvableam pour télécharger ...

Comment puis-je faire cela sans perdre le format d'image d'origine ou la qualité?


0 commentaires

4 Réponses :


29
votes

Comment puis-je faire cela sans perdre le format d'image d'origine ou la qualité?

Vous devez le sauvegarder en utilisant un format approprié (sans perte). format PNG est une option.

Le imageIO classe a des méthodes d'écriture d'une image à un flux de sortie.

Voici un exemple complet de la manière dont vous obtenez la prise d'un InputStream à partir duquel vous pouvez lire la représentation PNG du contenu d'un bufferedimage : < Pré> xxx


4 commentaires

Merci Csujo et @aioobe pour des réponses rapides ... mais dans les deux cas, je dois également gérer le format entrant de l'image ... Il n'y a pas d'autre moyen de faire la même chose sans cette conversion de format ??


Comment recevez-vous cette image "entrante"?


En choisissant une image à l'aide de Chooser de fichier


Utilisez ensuite un fichierInputStream pour enregistrer le tableau d'octets d'origine le long de l'image tamponnée. Dans l'étendue de mes connaissances, il n'ya aucun moyen de "récupérer" la séquence exacte des octets qui a été autrefois utilisée pour générer le contenu d'une bufferedimage.



3
votes

Voici un exemple de code:

ByteArrayOutputStream bas = new ByteArrayOutputStream();
ImageIO.write(image,"jpg", bas);
byte[] bytes = bas.toByteArray();
InputStream is = new ByteArrayInputStream(bytes);


0 commentaires

1
votes

Ecrire des fonctions pour Serialize / Non-assister sur la mémoire bufferedImage à / à partir d'un octet [] et utilisez des classes byteArrayInputStream et byteArrayOutPutStream .

Vous devez probablement sérialiser le type d'image, la largeur, la hauteur et les valeurs de pixel d'image (obtenues avec bufferedimage.getrgb (x, y) ).

L'alternative consiste à appeler imageio.write (image "," png ", tretream) Pour convertir l'image en format PNG et écrivez-le à un byteArrayOutPutStream . Il y a un équivalent imageIO.Read (INTRISTREAM) Méthode pour lire l'image à partir d'un byteArrayInputStream . Il y a un certain traitement des frais généraux dans la conversion vers / de PNG. Mais png est un format d'image compressé et vous économiserez beaucoup d'espace comparé à stocker les images non compressées.


1 commentaires

Bonjour, pouvez-vous élaborer plus la première méthode?



0
votes

Pour créer une blob: xxx


0 commentaires