Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
16
ZUGRIFFE
53275
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
  1. #1
    nils_eckert ist offline Rookie
    Registriert seit
    Nov 2003
    Beiträge
    9
    Hallo zusammen,

    wir müssen für die Uni ein Projekt machen, in dem wir unter anderem JPEGs verkleinern müssen (ne Galerie).

    Ich suche jetzt also ein Möglichkeit, wie z.B. bei der GD-Lib in PHP JPEGs mit Verschiedenen Qualitäten verkleinern zu können.

    Für alle Tips wäre ich dankbar.

    Viele Grüße,
    Nils
     

  2. #2
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    10.222
    Hallo!

    Schau mal hier:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    
    package de.tutorials.test;
     
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.image.BufferedImage;
    import java.awt.image.RenderedImage;
    import java.io.File;
    import java.io.IOException;
     
    import javax.imageio.ImageIO;
    import javax.swing.ImageIcon;
     
    public class Test48 {
     
        public static void main(String[] args) {
            try {
                Image img = new ImageIcon(ImageIO.read(new File("c:/Beispiel.jpg")))
                        .getImage();
                System.out.println(img.getWidth(null));
                System.out.println(img.getHeight(null));
     
                int wNew = 120, hNew = 90;
     
                Image scaledImage = img.getScaledInstance(wNew, hNew,
                        Image.SCALE_SMOOTH);
     
                BufferedImage outImg = new BufferedImage(wNew, hNew,
                        BufferedImage.TYPE_INT_RGB);
                Graphics g = outImg.getGraphics();
                g.drawImage(scaledImage, 0, 0, null);
                g.dispose();
     
                ImageIO.write(outImg, "jpeg", new File("c:/Beispiel_small.jpg"));
     
            } catch (IOException e) {
                e.printStackTrace();
            }
     
        }
    }

    Schneller gehts wenn man das Image über graphics.drawImage(image,newWidth,newHeight,null) zeichnet...
    Siehe auch hier:
    http://www.tutorials.de/forum/java/2...en-sollte.html

    Gruß Tom
     
    Du kommst aus dem Saarland oder Umgebung? Du hast Interesse an Java-Technologie Themen? Then let's Meetup!

    Java rocks! http://www.jugsaar.de

    Does IT in Java and .Net
    Xing
    Twitter

  3. #3
    nils_eckert ist offline Rookie
    Registriert seit
    Nov 2003
    Beiträge
    9
    Wow, hätte nicht gedacht, dass das so einfach geht

    Ich liebe Java

    Vielen Dank für die schnelle Antwort
    Nils
     

  4. #4
    nils_eckert ist offline Rookie
    Registriert seit
    Nov 2003
    Beiträge
    9
    Doppelposting
     

  5. #5
    Avatar von Billie
    Billie ist offline Mitglied Platin
    Registriert seit
    Jan 2003
    Ort
    Arzl im Pitztal (Tirol)
    Beiträge
    519
    Hellas!

    Hab den Code von Thomas in meinem neuen Programm verwendet, das läuft inzwischen auch. Trotzdem kommt es mir vor, als könnten die verkleinerten und gespeicherten Bilder eine bessere Qualität haben. Gibt es hier evtl. Lösungsansätze? zB JPEG bietet doch verschiedene Qualitätstufen (0-100), kann man diese Ansprechen?

    lg Billie
     
    Fann Ég Fjalli Fallega Steina
    Faldi Dá Alla Vildi Deim Leyna
    Huldi Dar Hellisskúta Heillasteina
    Alla Mína Una eth slegu Óskasteina

  6. #6
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    10.222
    Hallo!

    Schau mal hier:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    
    package de.tutorials;
     
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.FileOutputStream;
     
    import javax.imageio.ImageIO;
     
    import com.sun.image.codec.jpeg.JPEGCodec;
    import com.sun.image.codec.jpeg.JPEGEncodeParam;
    import com.sun.image.codec.jpeg.JPEGImageEncoder;
     
    public class JPEGCompressionExample {
        /**
         * @param args
         */
        public static void main(String[] args) throws Exception {
            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);
        }
    }

    Gruß Tom
     
    Du kommst aus dem Saarland oder Umgebung? Du hast Interesse an Java-Technologie Themen? Then let's Meetup!

    Java rocks! http://www.jugsaar.de

    Does IT in Java and .Net
    Xing
    Twitter

  7. #7
    Avatar von Billie
    Billie ist offline Mitglied Platin
    Registriert seit
    Jan 2003
    Ort
    Arzl im Pitztal (Tirol)
    Beiträge
    519
    Vielen Dank! Seh mir das bei Gelegenheit an, aber bin mir sicher, dass ich das verwenden kann.

    Nur noch eine andere, kleine Frage... warum gibt es standardmäßig keine Dokumentation zu den com.sun.* Klassen?! In diesen Klassen sind viele nützliche Dinge versteckt, aber woher soll man wissen, dass es sie gibt? Hatte das Problem schoneinmal mit Base64-De/Encoder ... gibt es in diesen Klassen auch schon.

    lg Billie
     
    Fann Ég Fjalli Fallega Steina
    Faldi Dá Alla Vildi Deim Leyna
    Huldi Dar Hellisskúta Heillasteina
    Alla Mína Una eth slegu Óskasteina

  8. #8
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    10.222
    Hallo!

    Die com.sun....* Klassen sind eigentlich auch nicht fuer den oeffentlichen Gebrauch gedacht... weiterhin ist nicht garantiert, dass diese Klassen auch bei anderen JVM Herstellern vorhanden sind.

    Hier eine Version ohne, com.sun....* Klassen:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    
    package de.tutorials;
     
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.util.Iterator;
    import java.util.Locale;
     
    import javax.imageio.IIOImage;
    import javax.imageio.ImageIO;
    import javax.imageio.ImageWriter;
    import javax.imageio.plugins.jpeg.JPEGImageWriteParam;
     
    public class JPEGCompressionExample {
        /**
         * @param args
         */
        public static void main(String[] args) throws Exception {
            BufferedImage image = ImageIO.read(new File("c:/Winter_big.jpg"));
            Iterator iterator = ImageIO.getImageWritersBySuffix("jpeg");
            ImageWriter imageWriter = (ImageWriter) iterator.next();
            JPEGImageWriteParam imageWriteParam = new JPEGImageWriteParam(Locale
                    .getDefault());
            imageWriteParam.setCompressionMode(JPEGImageWriteParam.MODE_EXPLICIT);
            imageWriteParam.setCompressionQuality(0.5F);
            IIOImage iioImage = new IIOImage(image, null, null);
            imageWriter.setOutput(ImageIO.createImageOutputStream(new File(
                    "c:/Winter_big_low.jpg")));
            imageWriter.write(null, iioImage, imageWriteParam);
        }
    }

    Gruss Tom
     
    Du kommst aus dem Saarland oder Umgebung? Du hast Interesse an Java-Technologie Themen? Then let's Meetup!

    Java rocks! http://www.jugsaar.de

    Does IT in Java and .Net
    Xing
    Twitter

  9. #9
    Avatar von Billie
    Billie ist offline Mitglied Platin
    Registriert seit
    Jan 2003
    Ort
    Arzl im Pitztal (Tirol)
    Beiträge
    519
    Neues Problem, mit dieser neuen Speicher-Methode bekomme ich keinen Output mehr auf meine Http-Verbindung.

    Also das funktioniert:

    Code :
    1
    2
    3
    
    // fc = javax.jnlp.FileContents (JavaWebStart)
    imageWriter.setOutput(ImageIO.createImageOutputStream(fc[i].getOutputStream(true)));
            imageWriter.write(null, iioImage, imageWriteParam);

    Aber ich will die Datei ja nicht überschreiben, sondern an den Server über die Verbindung schiecken und das funktioniert nicht, obwohl die Verbindung steht (EchoServer meldet Verbindung hergestellt, verbindung wieder geschlossen).

    Code :
    1
    2
    3
    4
    5
    6
    
    ByteArrayOutputStream byteStream = new ByteArrayOutputStream(512);
     
    imageWriter.setOutput(ImageIO.createImageOutputStream(byteStream));
    imageWriter.write(null, iioImage, imageWriteParam);
     
    byteStream.writeTo(connection.getOutputStream());

    Oder auch...

    Code :
    1
    2
    3
    4
    
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
     
    imageWriter.setOutput(ImageIO.createImageOutputStream(connection.getOutputStream()));
    imageWriter.write(null, iioImage, imageWriteParam);

    Wo liegt hier der Hund begraben?
     
    Fann Ég Fjalli Fallega Steina
    Faldi Dá Alla Vildi Deim Leyna
    Huldi Dar Hellisskúta Heillasteina
    Alla Mína Una eth slegu Óskasteina

  10. #10
    Vl3sH ist offline Grünschnabel
    Registriert seit
    Feb 2007
    Beiträge
    2
    Zitat Zitat von Thomas Darimont Beitrag anzeigen
    Hallo!

    Schau mal hier:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    
    package de.tutorials.test;
     
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.image.BufferedImage;
    import java.awt.image.RenderedImage;
    import java.io.File;
    import java.io.IOException;
     
    import javax.imageio.ImageIO;
    import javax.swing.ImageIcon;
     
    public class Test48 {
     
        public static void main(String[] args) {
            try {
                Image img = new ImageIcon(ImageIO.read(new File("c:/Beispiel.jpg")))
                        .getImage();
                System.out.println(img.getWidth(null));
                System.out.println(img.getHeight(null));
     
                int wNew = 120, hNew = 90;
     
                Image scaledImage = img.getScaledInstance(wNew, hNew,
                        Image.SCALE_SMOOTH);
     
                BufferedImage outImg = new BufferedImage(wNew, hNew,
                        BufferedImage.TYPE_INT_RGB);
                Graphics g = outImg.getGraphics();
                g.drawImage(scaledImage, 0, 0, null);
                g.dispose();
     
                ImageIO.write(outImg, "jpeg", new File("c:/Beispiel_small.jpg"));
     
            } catch (IOException e) {
                e.printStackTrace();
            }
     
        }
    }

    Gruß Tom

    Guten Morgen!

    ich hab mal versucht dieses Programm bei mir zum Laufen zu kriegen. Ich benutze einen Javaeditor und habe auch meine Classpath und Path Pfade in die Umgebungsvariablen geschrieben. Doch ich kriege immer noch einen "java.lang.NoClassDefFoundError" Fehler. Kann mir jemand bei diesem Fehler weiterhelfen?

    Mfg
    Volker
     

  11. #11
    MeinerEiner_80 Tutorials.de Gastzugang
    Moin!
    Wie rufst du denn das Programm auf und wo hast du es gespeichert?
    Da die Klasse sich in einem Paket befindet, muss sie auch entsprechend aufgerufen werden.
    Beispiel, die Klasse befindet sich in Verzeichnis "F:\examples\de\tutorials\test".
    Dann musst du in das Verzeichnis "F:\examples" wechseln und "java de.tutorials.test.Test48" aufrufen..


    *grüssle*
    MeinerEiner
     

  12. #12
    Vl3sH ist offline Grünschnabel
    Registriert seit
    Feb 2007
    Beiträge
    2
    Ja moin!

    C:\Dokumente und Einstellungen\Lego\Anwendungsdaten\JavaEditor\Test48.java

    Da liegt meine Datei. Ich rufe das Ganze wie gesagt über einen Java-Editor auf und der compiliert das Ganze auch direkt. Ich habe im Anhang eine Screenshot von dem Programm gemacht.

    Danke für eure Mühe

    Volker
    Miniaturansicht angehängter Grafiken Miniaturansicht angehängter Grafiken Java - JPEG laden, verkleinern, speichern-java.jpg  
     

  13. #13
    MeinerEiner_80 Tutorials.de Gastzugang
    Vielleicht habe ich mich nicht deutlich genug ausgedrückt, aber die Paketstruktur eines Programms spiegelt sich direkt in der Dateistruktur wieder. Also, wenn das Programm sich im Paket de.tutorials.test befindet, muss es sich auch in einem Verzeichnis "\de\tutorials\test" befinden, ansonsten kommt es zu der dir beschrieben Exception!

    *grüssle*
    MeinerEiner
     

  14. #14
    Bäästy ist offline Mitglied
    Registriert seit
    Sep 2007
    Beiträge
    14
    Hallo susammen,

    ich hab eine andere frage und zwar gib es eine Möglichkeit einen teil von einem bild auszuschneiden und zu speichern bzw ein bild erstellt das nur einen teil von dem ursprünglichen bild besitzt so dass man den rand weglässt ?
    so ähnlich wie die methode getScaledInstance. gibst da noch mehr in der richtung?

    wär cool
     

  15. #15
    nils_eckert ist offline Rookie
    Registriert seit
    Nov 2003
    Beiträge
    9
    Hallo Bäästy,

    mit g.drawImage(...) zeichnest du ja das eingelesene und ggf. skalierte Bild auf das Zielbild.

    Dabei kannst du die Startkoordinate mitgeben, also die obere rechte Ecke in der begonnen werden soll, das Ursprungsbild auf das Zielbild zu übertragen.

    Sind diese Werte negativ, schneidest du oben und links ab. Sind die Werte größer als Null, hast du in deinem neu angelegten Bild oben und links einen Rahmen um das hinein kopierte.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
     
    import javax.imageio.ImageIO;
    import javax.swing.ImageIcon;
     
    public class Test {
        public static void main(String[] args) throws IOException {
            Image image = new ImageIcon("/Users/nilseckert/Desktop/test.jpg").getImage();
     
            int cutLeft = 50, cutTop = 500;
            int width = 1024, height = 1024;
     
            BufferedImage targetImage = new BufferedImage(width, height, BufferedImage.SCALE_SMOOTH);
     
            Graphics g = targetImage.getGraphics();
            g.drawImage(image, -cutLeft, -cutTop, null);
            g.dispose();
     
            ImageIO.write(targetImage, "jpeg", new File("/Users/nilseckert/Desktop/test-cut.jpg"));
        }
    }

    Viele Grüße
    Nils
     

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. JPEG beim Hochladen verkleinern
    Von blck im Forum PHP
    Antworten: 4
    Letzter Beitrag: 29.06.09, 20:23
  2. JPEG als RGB speichern
    Von TS-JC im Forum PHP
    Antworten: 2
    Letzter Beitrag: 14.11.07, 10:59
  3. zu große jpeg verkleinern
    Von judith im Forum Photoshop
    Antworten: 7
    Letzter Beitrag: 06.08.04, 17:24
  4. [Java] BMPs laden, verändern und speichern
    Von Carndret im Forum Java
    Antworten: 7
    Letzter Beitrag: 22.04.03, 11:18