ok erstmal danke fuer all die Beitraege!
Ich bin jetzt etwas unsicher, wie ich vorgehen soll.
Was ich machen will:
Ein Programm schreiben, dass fuer alle CD-Front-Cover meiner mp3 Sammlung (die in verschiedensten Qualitäten und Auflösungen vorliegen) eine neue Datei erstellt, die sagen wir mal nicht größer als 200 kB ist.
(Denn ich möchte die Cover dann direkt in den ID3Tag speichern und will die Datei nicht unnötig groß machen, da meine Versuche ergeben haben, dass man bei dieser Größe auf jeden Fall Covers hat, die qualitativ ausreichend für den IPod oder den CoverFlow in iTunes sind)
Jetzt habe ich festgestellt gibt es ja unterschiedliche Vorgehen:
1. Einerseits wie in dem obigen Java Code, wo die Kompressions(?)Qualität verändert wird. Die Auflösung
bleibt aber ja die gleiche. (Was doch theoretisch sinnos ist, oder? Weil für ein Bild mit der obigen
Qualität 0.0 wuerde ja auch eine kleinere Auflösung reichen, oder?)
2. Andererseits kann man ja auch die Auflösung runterschrauben. Meine Versuche haben ergeben, dass zB 400x400 ausreichend ist, solange die Qualität gut ist.
Ich habe hier mal eine (vermutlich dilletantische) Klasse geschrieben, die die Auflösung auf 400x400 runterschraubt:
[Java]
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class ScaleImage {
public static void main(String[] args) throws IOException {
BufferedImage originalImage = ImageIO.read(new File("c:/front.png"));
double height = originalImage.getHeight();
double width = originalImage.getWidth();
double newHeight = 400;
double newWidth = 400;
//Pruefen, ob mindestens entweder Hoehe oder Breite des Covers groesser als 400 ist.
//Falls ja, wird die groessere Seite auf 400, die kleinere auf den dem Seitenverhaeltnis
//des Originals entsprechenden kleineren Wert hinuntergerechnet.
if (width > 400 || height > 400) {
if (width > height) {
newHeight = height / (width / 400);
} else if (height > width) {
newWidth = width / (height / 400);
}
}
int type = originalImage.getType();
BufferedImage scaledImage = new BufferedImage((int)newWidth, (int)newHeight, type);
Graphics2D g2d = (Graphics2D) scaledImage.getGraphics();
g2d.drawImage(originalImage, 0, 0, (int)newWidth, (int)newHeight, null);
ImageIO.write(scaledImage, "png", new File("/bild-small.png"));
}
}
[/Java]
Danach ist aber auf jeden Fall die Qualität dahin...
Was waere wohl das beste Vorgehen? Erst die Auflösung auf 400x400 und falls die Datei dann noch zu groß ist, die Quali runterschrauben - oder andersrum?
Oder ist das nicht so trivial
?