Hallo,
ich habe folgendes Problem: Ich bin dabei, ein Foto-Album Programm zu erstellen, welches u.A. natürlich auch Thumbnails erstellen soll. Da ich selbst von der JPEG Kompression keine Ahnung habe, habe ich mich übers Internet schlau gemacht wie das denn so funktionieren könnte. Dabei wurde ich auch fündig, nur leider ist die Qualität der Thumbnails ziemlich mies. Auch bei einer Qualitätseinstellung von 95% wächst zwar die Dateigröße, aber die Qualität bleibt eher mittelmäßig bis schlecht. Wenn ich die Thumbs mit Fireworks erstelle sind die Dateien halb so groß bei besserer Qualität.
Also denke ich mir - dann unterstützt Java das halt nicht - und gut ist. Aber Pustekuchen. Habe etwas weitergesucht und bin auf jalbum.net gestoßen. Ist an sich ein super Programm, und die qualität ist vergleichbar mit Fireworks. Nungut aber ich möchte es trotzdem selber Programmieren, weil ich noch spezielle andere Anpassungen machen will, das soll quasi ein Offline - Administrationsprogramm für ne ganze Website werden.
So, hier jetzt der Quelltextteil für die Kompression: (ist zugegebenermaßen "ergoogelter" quelltext)
So, und wenn jetzt jemand weiß, wie man bei gleicher Dateigröße bessere Qualität erhält wäre ich super froh wenn er mir helfen könnte. Alternativ würde mir auch eine Konsolenapplikation reichen, die ich dann über java einfach ansteuern kann, wäre ja auch kein problem.
ich habe folgendes Problem: Ich bin dabei, ein Foto-Album Programm zu erstellen, welches u.A. natürlich auch Thumbnails erstellen soll. Da ich selbst von der JPEG Kompression keine Ahnung habe, habe ich mich übers Internet schlau gemacht wie das denn so funktionieren könnte. Dabei wurde ich auch fündig, nur leider ist die Qualität der Thumbnails ziemlich mies. Auch bei einer Qualitätseinstellung von 95% wächst zwar die Dateigröße, aber die Qualität bleibt eher mittelmäßig bis schlecht. Wenn ich die Thumbs mit Fireworks erstelle sind die Dateien halb so groß bei besserer Qualität.
Also denke ich mir - dann unterstützt Java das halt nicht - und gut ist. Aber Pustekuchen. Habe etwas weitergesucht und bin auf jalbum.net gestoßen. Ist an sich ein super Programm, und die qualität ist vergleichbar mit Fireworks. Nungut aber ich möchte es trotzdem selber Programmieren, weil ich noch spezielle andere Anpassungen machen will, das soll quasi ein Offline - Administrationsprogramm für ne ganze Website werden.
So, hier jetzt der Quelltextteil für die Kompression: (ist zugegebenermaßen "ergoogelter" quelltext)
Code:
public void compress(File quellDatei, File zielDatei, int breite, int hoehe,
int qualitaet) {
Image image = Toolkit.getDefaultToolkit().getImage(quellDatei.getAbsolutePath());
MediaTracker mediaTracker = new MediaTracker(new Container());
mediaTracker.addImage(image, 0);
try {
mediaTracker.waitForID(0);
}
catch (InterruptedException ex) {
}
// determine thumbnail size from WIDTH and HEIGHT
int thumbWidth = breite;
int thumbHeight = hoehe;
double thumbRatio = (double) thumbWidth / (double) thumbHeight;
int imageWidth = image.getWidth(null);
int imageHeight = image.getHeight(null);
double imageRatio = (double) imageWidth / (double) imageHeight;
if (thumbRatio < imageRatio) {
thumbHeight = (int) (thumbWidth / imageRatio);
}
else {
thumbWidth = (int) (thumbHeight * imageRatio);
}
// draw original image to thumbnail image object and
// scale it to the new size on-the-fly
BufferedImage thumbImage = new BufferedImage(thumbWidth, thumbHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics2D = thumbImage.createGraphics();
graphics2D.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING,
RenderingHints.VALUE_COLOR_RENDER_QUALITY);
graphics2D.drawImage(image, 0, 0, thumbWidth, thumbHeight, null);
// save thumbnail image to OUTFILE
BufferedOutputStream out = null;
try {
out = new BufferedOutputStream(new
FileOutputStream(zielDatei));
}
catch (FileNotFoundException ex1) {
}
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.
getDefaultJPEGEncodeParam(thumbImage);
int quality = qualitaet;
quality = Math.max(0, Math.min(quality, 100));
param.setQuality( (float) quality / 100.0f, false);
encoder.setJPEGEncodeParam(param);
try {
encoder.encode(thumbImage);
}
catch (ImageFormatException ex2) {
}
catch (IOException ex2) {
}
}
So, und wenn jetzt jemand weiß, wie man bei gleicher Dateigröße bessere Qualität erhält wäre ich super froh wenn er mir helfen könnte. Alternativ würde mir auch eine Konsolenapplikation reichen, die ich dann über java einfach ansteuern kann, wäre ja auch kein problem.