J'essaie de stocker une image téléchargée par l'utilisateur dans la base de données avec un attribut Maintenant, le problème est que j'ai un Comment puis-je faire cela sans perdre le format d'image d'origine ou la qualité? P> LONGBLOB CODE> ... J'ai rencontré un problème avec un
Paretstatement code> qui a deux méthodes Pour définir un blob qui sont: p>
VIDS Public Setbilararintream (Int paramètreIndex, InputStream X) code> p>
Public Void SetBlob (int paramètreindex, blob x) code> p>
Public Void Setblob (INT Parameterindex, InputStream InputStream) Code> P>
bufferedimage code> qui doit être converti en
blob code> ou
introuvableam code> pour télécharger ... p>
4 Réponses :
Comment puis-je faire cela sans perdre le format d'image d'origine ou la qualité? strong> em> p> p> p> P>
Vous devez le sauvegarder en utilisant un format approprié (sans perte). format PNG est une option. P>
Le
imageIO code>
classe a des méthodes d'écriture d'une image à un flux de sortie. P>Voici un exemple complet de la manière dont vous obtenez la prise d'un
InputStream code> à partir duquel vous pouvez lire la représentation PNG du contenu d'un
bufferedimage code>: p> < Pré> xxx pré> blockquote>
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.
Voici un exemple de code:
ByteArrayOutputStream bas = new ByteArrayOutputStream(); ImageIO.write(image,"jpg", bas); byte[] bytes = bas.toByteArray(); InputStream is = new ByteArrayInputStream(bytes);
Ecrire des fonctions pour Serialize / Non-assister sur la mémoire bufferedImage
à / à partir d'un Vous devez probablement sérialiser le type d'image, la largeur, la hauteur
et les valeurs de pixel d'image (obtenues avec L'alternative consiste à appeler octet [] code> et utilisez des classes
byteArrayInputStream code> et
byteArrayOutPutStream code>. p>
bufferedimage.getrgb (x, y) code>). p>
imageio.write (image "," png ", tretream) code>
Pour convertir l'image en format PNG et écrivez-le à un
byteArrayOutPutStream code>. Il y a un équivalent
imageIO.Read (INTRISTREAM) code>
Méthode pour lire l'image à partir d'un
byteArrayInputStream code>.
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. p>
Bonjour, pouvez-vous élaborer plus la première méthode?
Pour créer une blob: