ImageIcon komprimieren (zB Jpeg)

Status
Nicht offen für weitere Antworten.

Baweg

Mitglied
Hi,
ich verschicke ein ImageIcon als Objekt übers Netz. Damit das ganze schneller geht möchte ich das Bild noch in Jpeg komprimieren lassen allerdings ohne auf der Festplatte zwischenzuspeichen. Also ich möchte als Ergebnis wieder ein komprimiertes ImageIcon. Das ganze kann auch mit einem BufferedImage gemacht werden da ich zunächst eh ein BufferedImage benutze und das vorm schicken dann in ein ImageIcon umwandle wegen der Serialisierung. Wäre nett wenn mir jemand sagen könnte wie ich das machen könnte.

MfG Baweg
 
B

Beni

Gast
Benutz "ImageIO.write" um das Bild in jpg umzuwandeln. Du kannst der write-Methode einen eigenen OutputStream übergeben - der "ByteArrayOutputStream" würde sich anbieten.
 

Baweg

Mitglied
Ok, aber ich hab das mit diesen ganezn Input- und Outputstreams noch nicht so verstanden. Wie kriege ich denn aus einem Outputstream dann weider ein ImageIcon? Im Inet findest man nur wie man mit ImageIO über nen FileOutputStream dann in ne Datei speichert...
 
B

Beni

Gast
Den ByteArrayOutputStream kannst du z.B. in ein byte[] umwandeln (es gibt eine Methode "toByteArray"), und mit dem byte[] kannst du wieder ein ByteArrayInputStream generieren.
Tjo, und mit einem InputStream + der ImageIO.read-Method kannst du das Bild wieder einlesen.
 

Baweg

Mitglied
Hey danke :)
Scheint soweit zu klappen, aber ich weiß nicht ob es wirklich viel schneller übertragen wird jetzt. Wie kann ich denn die JPG-Quali betsimmen? Hab jetzt einfach ImageIO.write(buff,"jpg",out) aber da geb ich ja garkeine Quali an.
Und kann man irgendwie gucken wie groß (also wieviel byte) so ein bufferedimage hat. Würd mich mal interessieren wieviel die Kompression denn gebracht hat...
 

Baweg

Mitglied
Also hab mal die einzelnen Schritte zeitlich messen lassen. Zum Komprimieren braucht er jeweils so 1200 bis 1400 ms und zum schicken slebst bei einer Komprimierung mit Quali 0.01 braucht er 1200ms.

Hab es jetzt mit einen JpegEncoder gemacht der ist zumnindest 200ms schneller als das ImageIO. Gibt es keine Möglichkeit das shcneller zu komprimieren?

Und warum braucht der zum schicken über 1 Sekunde obwohl das Bild vllt 10kb groß ist?
Habe grad auch nochmal ohne Komprimierung geschickt und dann braucht er sogar nur 1000ms und das bei nem 5mb Bild. Wieso vershcickt der 5mb schneller als 20kb?
Ich möchte halt eine Bildfolge schicken und die sollte so flüssig wie möglich sein...

MfG Baweg
 
G

Guest

Gast
Gibt es keine Möglichkeit Bilder schneller übers Netz zu verschicken? Kann doch net sein dass man über 1 Sekunde braucht für ein 20kb-Bild....
 

Baweg

Mitglied
Würde das ganze vllt über RMI schneller laufen? Wie kann man sowas über RMI verwirklichen? Kann man auf dem einen Rechner eine Methode einfach aufrufen die dann das Image an den anderen Rechner zurückgibt?

MfG Baweg
 
B

Beni

Gast
Vielleicht ist dein Protokoll einfach zu kompliziert? Auf jede Antwort einer Nachricht muss man ein paar Millisekunden warten...

RMI... da ist der Overhead für ein Aufruf wohl grösser als dein Bild... aber ein Versuch ist es sicherlich Wert :wink:

Du kannst auchmal versuchen dein Bild in ein ZIP-Archiv zu setzen, der "ZipOutput/InputStream" kann da helfen.
 

Baweg

Mitglied
Ja also mit dem ZipOutputStream hab ich auch mal versucht aber hab ich ent so hinbekommen... Muss ich dann erst mit ImageIO nen Stream draus machen oder wie? Bei mir kam da nur ein schwarzes Bild am Ende an... Und muss ich dass dann nicht mehr vorher noch in jpg komprimieren?
 
B

Beni

Gast
Du kannst den ZipOutputStream der ImageIO bei einem "write" direkt übergeben, das sollte deinen Code nicht allzusehr aufblähen.

Ob du es in ein JPG umwandeln musst, musst du selbst bestimmen. Entweder Performance oder Qualität... deine Wahl :wink:
 

Baweg

Mitglied
Ich will ja vor allem Performance da ich die Bilder so schnell wie möglich übertragen haben will... Ich frag nur ob man noch eine jpeg-Komprimierung braucht wenn man schon zip hat...
 

Baweg

Mitglied
Hi habs mal mit dem ZipOutputStream versucht, bekomme aber folgende Exception:

Code:
java.util.zip.ZipException: no current ZIP entry

Code:
Code:
Socket socket = new Socket("192.168.2.8", 6000);
ZipOutputStream zip = new ZipOutputStream(socket.getOutputStream());
ImageIO.write(buff, "jpg", zip);
 

Baweg

Mitglied
Also habs jetzt mal folgendermaßen gemacht und jetzt dauerts nur noch paar Milisekunden zum schicken, aber es wird nur ein Teil des Bildes angezeigt und nach dem 2. oder 3. Bild empfängt der garnix mehr....
Wieso ist das so?


So schicke ich:
Code:
final ByteArrayOutputStream cache = new ByteArrayOutputStream(64 * 1024);
ImageIO.write(image, "jpeg", cache);
cache.flush();
long timeEnd = System.currentTimeMillis();
System.out.println("time: " + (timeEnd - timeStart));
System.out.println("sending...");
byte[] array = cache.toByteArray();
timeStart = System.currentTimeMillis();
final BufferedOutputStream output = new BufferedOutputStream(socket.getOutputStream(), 64 * 1024);  
output.write(array);
output.flush();
timeEnd = System.currentTimeMillis();
System.out.println("time: " + (timeEnd - timeStart));

So nehme ich an:
Code:
Socket socket = serversocket.accept(); 
DataInputStream in = new DataInputStream(socket.getInputStream()); 
byte[] bytearray = new byte[10000000]; 
in.read(bytearray);
ByteArrayInputStream bain = new ByteArrayInputStream(bytearray);
BufferedImage buff = ImageIO.read(bain);
Image img = (Image) buff;
 

Baweg

Mitglied
Ich will dass ja mit nem Buffer annehmen, der aber nicht so groß ist wie die Datei wahrscheinlich. Wie kann ich dem denn sagen dass er erst dann das Image erstellen soll wenn er alle bytes empfangen hat?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P ImageIcon zusammen mit Fenstergrösse skalieren Java Basics - Anfänger-Themen 3
G ImageIcon in Byte-Array ablegen Java Basics - Anfänger-Themen 7
O ImageIcon, Swing Java Basics - Anfänger-Themen 1
F Interface ImageIcon wird nicht angezeigt Java Basics - Anfänger-Themen 4
R Java ImageIcon drehen Java Basics - Anfänger-Themen 6
F Problem bei ImageIcon aktualisieren Java Basics - Anfänger-Themen 5
P ImageIcon in JAR Java Basics - Anfänger-Themen 5
T Compiler-Fehler Mit Array und "for" mehrere ImageIcon erstellen Java Basics - Anfänger-Themen 7
S GUI ImageIcon Mouselistener Link Java Basics - Anfänger-Themen 0
E Bild vom FileChooser aus via ImageIcon in DB schreiben Java Basics - Anfänger-Themen 16
R JLabel imageicon jede Sekunde wechseln Java Basics - Anfänger-Themen 3
K ImageIcon laden Java Basics - Anfänger-Themen 6
S Button durch ImageIcon ersetzen Java Basics - Anfänger-Themen 9
P byte Array aus ImageIcon Java Basics - Anfänger-Themen 10
D JButton oder ImageIcon klickt "langsam" Java Basics - Anfänger-Themen 5
R ImageIcon wird nich angezeigt - Jar, Eclipse Java Basics - Anfänger-Themen 6
P ImageIcon/Pfad Java Basics - Anfänger-Themen 3
C ImageIcon erweitern Java Basics - Anfänger-Themen 6
H ImageIcon rotieren Java Basics - Anfänger-Themen 4
w0ddes ImageIcon in Objektarray (TableModel) einfügen. Java Basics - Anfänger-Themen 7
T ImageIcon ohne Classloader Java Basics - Anfänger-Themen 12
S ImageIcon Array Java Basics - Anfänger-Themen 8
Developer_X eigenes ImageIcon schreiben Java Basics - Anfänger-Themen 11
P ImageIcon Problem Java Basics - Anfänger-Themen 15
B Aus JTable ImageIcon abfragen Java Basics - Anfänger-Themen 8
G ImageIcon Java Basics - Anfänger-Themen 4
D ImageIcon in Label Java Basics - Anfänger-Themen 7
J ImageIcon im JLabel automatisch resizen. Java Basics - Anfänger-Themen 6
G JLabel nachträglich verändern, bzw. ImageIcon ändern? Java Basics - Anfänger-Themen 3
G JPEG aus Blob als ImageIcon anzeigen Java Basics - Anfänger-Themen 5
L ImageIcon an jLabel anpassen? Java Basics - Anfänger-Themen 5
T new JLabel(new ImageIcon("dateiname&pfad.gif") Java Basics - Anfänger-Themen 2
D ImageIcon beschreiben Java Basics - Anfänger-Themen 13
U BufferedImage anzeigen, imageIcon oder paintComponent(); Java Basics - Anfänger-Themen 6
M imageicon aus jar (ja hab die suchfunktion schon benutzt :)) Java Basics - Anfänger-Themen 2
F Tooltips bei ImageIcon in Tabellenspalte Java Basics - Anfänger-Themen 1
X ImageIcon und .exe-Datei Java Basics - Anfänger-Themen 2
K Bildgröße eines ImageIcon verändern Java Basics - Anfänger-Themen 2
L bytestrom in ImageIcon-Objekt umwandeln Java Basics - Anfänger-Themen 3
S Image von ImageIcon anpassen Java Basics - Anfänger-Themen 3
D ImageIcon JApplet Java Basics - Anfänger-Themen 2
Dilandau permission exception bei ImageIcon Java Basics - Anfänger-Themen 6
Z DNA-komprimieren Java Basics - Anfänger-Themen 28
L Methoden String text komprimieren und dekomprimieren Java Basics - Anfänger-Themen 14
E String komprimieren - Kürzen ohne Informationsverlust? Java Basics - Anfänger-Themen 13
P if Anweisungen komprimieren Java Basics - Anfänger-Themen 6
-horn- BigIntegers zum Speichern umwandeln oder "komprimieren"? Java Basics - Anfänger-Themen 13
L ZeichenRuns komprimieren Java Basics - Anfänger-Themen 3
D wie kann ich ein BufferedImage komprimieren? Java Basics - Anfänger-Themen 7
F String Komprimieren Java Basics - Anfänger-Themen 2
T jpeg Bilder zoomen.. Java Basics - Anfänger-Themen 2
H Erste Schritte Von jpg zu jpeg // reguläre Ausdrücke Java Basics - Anfänger-Themen 3
B große jpeg verarbeiten Java Basics - Anfänger-Themen 8
S Jpeg-bILD Java Basics - Anfänger-Themen 19
S jpeg bzw bufferedimage als PDF Speichern Java Basics - Anfänger-Themen 13
A JPEG anzeigen Java Basics - Anfänger-Themen 3
S jpeg Bild anzeigen java Java Basics - Anfänger-Themen 3
D File(jpeg) größe ändern und dann zu einen byte[] Java Basics - Anfänger-Themen 7
K Wohin gehört in Eclipse ein jpeg-Bild ? Java Basics - Anfänger-Themen 4
T JApplet JPEG einbinden geht nur "offline" Java Basics - Anfänger-Themen 6
C java, jpeg, animiert Java Basics - Anfänger-Themen 9
G JPEG einlesen Java Basics - Anfänger-Themen 7
N html in jpeg umwandeln Java Basics - Anfänger-Themen 6
D BMP in JPEG konvertieren Java Basics - Anfänger-Themen 2
S tif in jpeg Java Basics - Anfänger-Themen 5
M jpeg in ein Frame zaubern Java Basics - Anfänger-Themen 10
A JPEG mit ins JAR-Archiv Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben