Inputstream in BufferedImage-Konvertierung Schäden die Datei
Ich bin das hochladen von Bild-Dateien mithilfe von servelt. Ich will die Größe der Bilder. Ich konvertiert die Quelle in BufferedImage mit folgenden Zeilen.
InputStream imageStream = item.getInputStream();
BufferedImage imageBuffer = ImageIO.read(imageStream);
Dann habe ich das Bild verkleinern und schreiben in einem Speicherort. Aber, alle output-Dateien Größe ist 0
.
Ich bin mit dem folgenden code, um die Größe des Bildes.
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
Ist es eine gute Weg, um zu konvertieren inputstream in bufferedImage, ohne die Bild?
Ich bin sicher, dass das Bild immer hochgeladen. Aber, nach der Umstellung auf BufferedImage, wird die Datei beschädigt.
Ich bin hochladen, indem Sie ein Formular Einreichen, doPost () - Methode. Die folgende Zeile gibt mir den InputStream aus einer Liste Element.
InputStream imageStream = item.getInputStream();
- Und, ich Schreibe es durch
ImageIO.write(image, "jpg", new File(path + ".jpg"));
Update
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)
Jede suggesstions oder link woulb dankbar sein!!!
Dank!
Wie sind Sie mit dem hochladen? Und schreiben? Könnte das problem sein, an diese Punkte? Sie konnten zeigen, mehr code?
Peters: Jetzt meine Frage aktualisiert
Jetzt aktualisiert die Frage. Check it out!
InformationsquelleAutor | 2010-11-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Grund, warum Ihr code nicht funktioniert, ist in
Ihre Ziel-Bild ist null.
Erstellen Sie ein neues BufferedImage zu setzen, die skalierte version auf, wie diese:
Speichern Sie dann die dstImage (mit ImageIO.schreiben).
Edit:
Einen einfacheren Weg, verkleinere das Bild wäre, nur ziehen Sie es in die dstImage bei der richtigen Größe:
Ich habe Ihre
getGraphics().drawImage()
. Aber wieder das Vorherige problem. Image-Datei mit0 bytes
. Keine Fehler in der Konsole. Kein stack-strace. Ich denke, dass die Konvertierung nur dann macht das problem. Haben wir keine anderen Weg, um zu konvertieren InputStream in BufferedImageor
gibt es eine Möglichkeit zu bekommen, BUfferedImage statt InputStream aus der Liste Element.Es ist durchaus möglich, es gibt einige andere Ausgabe als gut. Sind Sie wirklich zu sehen, eine Ausgabegröße von 0 aus mit ImageIO.schreiben Sie auf ein neu erzeugtes BufferedImage mit einer von null verschiedenen Breite/Höhe? Wie, was passiert, wenn Sie gehen Sie einfach ImageIO.schreiben(new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB) "jpg", new File("foo.jpg")); ?
OK, versuchen Sie, den code habe ich gerade bearbeitet. Das sollte Ihnen ein 100x100 Bild skaliert, oder eine Fehlermeldung, wenn das laden fehlgeschlagen. Es ist auch möglich, dass ImageIO kann nicht erkennen, das Bild, oder, dass es in der Tat bekommen irgendwie beschädigt.
Darf ich wissen, was du geändert im code als Vorherige. Ich kann nicht in der Lage, um zu sehen, alle änderungen in Ihrem code. Erhalte ich die korrekte Ausgabe Bild. Sehr sehr vielen Dank Mann. Vielen Dank für Eure Unterstützung!!! 🙂
InformationsquelleAutor Zarkonnen
Dies kann nur ein Tippfehler in der Frage, aber die filter-operation auf AffineTransformOp falsch verwendet wird.
Wenn uploadImage ist die Quelle, es sollte nicht auch das Ziel für die Filterung. In der Tat, wenn Sie versuchen, um festzulegen, uploadImage da beide Parameter der filter sollte eine Ausnahme ausgelöst werden.
Erstellen eines BufferedImage-Instanz zu handeln als Ziel und pass auf die filter-Methode.
Siehe mein update. Der trace wird aktualisiert in Frage.
InformationsquelleAutor Jeff