JPG Komprimieren....

Status
Nicht offen für weitere Antworten.

Der_Dude

Mitglied
Hi ,

ich arbeite grade an einer kleinen Arbeit für mein Studium. Ich soll mit Java ein Tool umsetzen was dem Nutzer die Fähigkeiten btw. Schwächen der für die bei JPG-Dateien verwendeten Komprimierung vors Auge führt.

Ich habe soweit meine JPanel's auf dem ich das Orginal und eine Komprimierte Version anzeige.
Allerdings hab ich ein Problem mit der Komprimierung, ich weis einfach nicht wie ich es schaffe das Bild zu komprimieren ohne sie auf die Platte zu schreiben(Quelltext bsp. unten). Ein anderes Problem ist, wenn ich das Komprimierte Bild später nicht mehr auf die Festplatte schreibe wie komm ich dann an die Dateigröße.

Ich hoffe ihr könnt mir ein wenig auf die Sprünge helfen.
Lg Der Dude

Code:
BufferedImage image = ImageIO.read(new File("c:/Wasserlilien.jpg"));
JPEGImageEncoder jpegImageEncoder = JPEGCodec.createJPEGEncoder(new FileOutputStream("c:/Wasserlilien_low.jpg"));
JPEGEncodeParam param = jpegImageEncoder.getDefaultJPEGEncodeParam(image);
param.setQuality(0.5F, true);
jpegImageEncoder.encode(image, param);
 

hdi

Top Contributor
Ein anderes Problem ist, wenn ich das Komprimierte Bild später nicht mehr auf die Festplatte schreibe wie komm ich dann an die Dateigröße.

Das ist jetzt zwar nur geraten, aber musst du ein File-Object auf die Platte schreiben
bevor du dir Infos darüber ausgeben lassen kannst?
Beim Schreiben eines Files werden doch auch nur die Bytes kopiert. Aber wieviele
Bytes in einem Objekt stecken, musst du doch auch so rausfinden können.
Immerhin liegt das Ding auf dem Heap, und belegt diesen Speicher dort auch :bahnhof:
 

Der_Dude

Mitglied
Servus,

naja das File-Object gibt mir die Exakte größe in Byte, wenn ich dass ganze so hier abfrage:
Code:
// output ist ein BufferedImage
if(output.getData().getDataBuffer().getDataType() == DataBuffer.TYPE_BYTE)ManLabel.setText("Komprimiert ("+(((DataBufferByte) output.getData().getDataBuffer()).getData().length/1024)+" KByte)");

erhalte ich andere Ergebnisse als über das File Object.

Allerdings ist das dringendere Problem, die Komprimierung des Bildes. Wie gesagt ich habe zwei Bilder (Orginal und Komprimierung, beide als BufferedImages ) per Splitpanel getrennt und möchte diese beiden Bilder sozusagen gegen über stellen.

Danke erstmal für die schnelle Antwort,
Lg der Dude.
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben