Inputstream de BufferedImage Conversion des dommages-intérêts le fichier
Je suis le téléchargement de quelques fichiers d'image à l'aide de servelt. Je veux redimensionner les images. J'ai convertit la source de BufferedImage ci-dessous à l'aide de lignes.
InputStream imageStream = item.getInputStream();
BufferedImage imageBuffer = ImageIO.read(imageStream);
Puis-je redimensionner l'image et écris-le dans un emplacement. Mais, tous les fichiers de sortie taille est 0
.
J'utilise le code suivant pour redimensionner l'image.
AffineTransform at = new AffineTransform();
if(sx != 0)
at.scale( sx , sx );
AffineTransformOp ato = new AffineTransformOp(at, AffineTransformOp.TYPE_BILINEAR);
uploadImage = ato.filter(uploadImage, null); //uploadImage == BufferedImage
Est-il un bon moyen pour convertir inputstream de bufferedImage sans nuire à l'image?
Je suis sûr que l'image est prise en téléchargement. Mais, après la conversion de BufferedImage, le fichier endommagé.
Je suis le téléchargement par l'envoi d'un formulaire de doPost() la méthode. La ligne ci-dessous me donne l'InputStream à partir d'un élément de liste.
InputStream imageStream = item.getInputStream();
Et, je l'écris par
ImageIO.write(image, "jpg", new File(path + ".jpg"));
Mise à jour
java.awt.image.ImagingOpException: Unable to transform src image
at java.awt.image.AffineTransformOp.filter(Unknown Source)
at com.pricar.servlet.imageupload.ImageUploadServlet.reSize(ImageUploadServlet.java:100)
at com.pricar.servlet.imageupload.ImageUploadServlet.doPost(ImageUploadServlet.java:74)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:943)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Tout suggesstions ou lien woulb en être reconnaissants!!!
Merci!
- S'il vous plaît ajouter votre écriture (sortie) code
- Comment êtes-vous télécharger? Et l'écriture? Pourrait être le problème au niveau de ces points? Pourriez-vous montrer plus de code?
- Peters: Maintenant mis à jour ma question
- Maintenant mis à jour la question. Check it out!
Vous devez vous connecter pour publier un commentaire.
La raison que votre code n'est pas le travail, c'est dans
Votre image de destination est null.
Vous devez créer un nouveau BufferedImage pour mettre à l'échelle la version, comme ceci:
Ensuite, enregistrez le dstImage (à l'aide de ImageIO.écrire).
Edit:
Un moyen plus facile de réduire l'échelle de l'image serait juste de le mettre dans le dstImage à la bonne taille:
getGraphics().drawImage()
. Mais encore une fois, le problème précédent. Fichier Image avec0 bytes
. Pas d'erreurs dans la console. Aucune pile strace. Je pense que la conversion n'est le problème. Nous n'avons aucun autre moyen de convertir InputStream de BufferedImageor
Est-il possible de BUfferedImage au lieu de InputStream de l'élément de la liste.It's also possible that ImageIO can't recognise the image, or that it did indeed get somehow corrupted.
Sa se passe maintenant.Ce n'est peut-être une faute de frappe dans la question, mais l'opération de filtrage sur AffineTransformOp est utilisé de manière incorrecte.
Si uploadImage est la source, il ne devrait pas également être la destination pour le filtrage. En fait, si vous essayez de spécifier uploadImage que les deux paramètres de filtre doit lever une exception.
Créer un BufferedImage instance d'agir en tant que votre destination et le passer à la méthode de filtrage.