Hallo zusammen
Ich habe die Folgende Aufgabenstellung (nicht Schulaufgabe *g*):
- Ein Tool in Java, welches ein Bild (4-10MB) lädt und auf zwei Grössen (beide massiv kleiner) verkleinert.
- Beim einen (dem grösseren) wird ein Vorgegebenes Bild überlagert (Logo-Einblendung unten rechts).
Das Ganze habe ich programmiert und funktioniert soweit auch:
Zu Deutsch ... Bild als BufferedImage laden und anschliessend mit getScaledInstance verkleinern, mit drawRenderedImage das Bild + Logo überlagern und wieder speichern mit ImageIO
Nun zu meinem Problem:
--> Die Bilder haben keine sehr gute Qualität.
Kann mir jemand sagen, wo die Qualität verloren geht und wo es eine bessere Methode gibt, die Bilder zu verkleinern?
Danke im Voraus
Viele Grüsse
Ich habe die Folgende Aufgabenstellung (nicht Schulaufgabe *g*):
- Ein Tool in Java, welches ein Bild (4-10MB) lädt und auf zwei Grössen (beide massiv kleiner) verkleinert.
- Beim einen (dem grösseren) wird ein Vorgegebenes Bild überlagert (Logo-Einblendung unten rechts).
Das Ganze habe ich programmiert und funktioniert soweit auch:
Java:
BufferedImage bsrc = ImageIO.read(m_f);
BufferedImage blogo = ImageIO.read(new File("h.png"));
BufferedImage bresized = new BufferedImage(w1, h1, BufferedImage.TYPE_INT_RGB);
BufferedImage bthumb = new BufferedImage(w2, h2, BufferedImage.TYPE_INT_RGB);
Graphics2D g1 = bresized.createGraphics();
Graphics2D g2 = bthumb.createGraphics();
AffineTransform at1 = AffineTransform.getScaleInstance((double)w1/bsrc.getWidth(),(double)h1/bsrc.getHeight());
AffineTransform at2 = AffineTransform.getScaleInstance((double)w2/bsrc.getWidth(),(double)h2/bsrc.getHeight());
AffineTransform atlogo = AffineTransform.getScaleInstance((double)w1/blogo.getWidth(),(double)h1/blogo.getHeight());
g1.drawRenderedImage(bsrc,at1);
g1.drawRenderedImage(blogo,atlogo); // Logo hinzufügen ...
g2.drawRenderedImage(bsrc,at2);
ImageIO.write(bresized, "JPG", new File(path + "resized\\" + newName));
ImageIO.write(bthumb, "JPG", new File(path + "resized\\thumbs\\" + newName));
Zu Deutsch ... Bild als BufferedImage laden und anschliessend mit getScaledInstance verkleinern, mit drawRenderedImage das Bild + Logo überlagern und wieder speichern mit ImageIO
Nun zu meinem Problem:
--> Die Bilder haben keine sehr gute Qualität.
Kann mir jemand sagen, wo die Qualität verloren geht und wo es eine bessere Methode gibt, die Bilder zu verkleinern?
Danke im Voraus
Viele Grüsse