Homepage von Jean-René Thies — Projekte & Tools rund um Java, Groovy, Grails, PHP, Scala, MySQL...
    « Scala-Anwendungen außerhalb von Netbeans startenCatchUp - hinter den Kulissen »

    JPEG Resizer

    Permalink 04.04.09 11:46, von jrt, Kategorien: Project Plaza, Java , Schlagworte: automatisierung, java, jpeg, skalierung

    Neulich brauchte ich ein Java-Programm, um eine Menge JPEG-Dateien möglichst schnell und automatisiert zu verkleinern. Dazu habe ich ein paar Code-Schnipsel aus verschiedenen Foren zusammengetragen und das hier daraus gemacht:

    Code:

    package jpegresizer;
     
    import com.sun.image.codec.jpeg.JPEGCodec;
    import com.sun.image.codec.jpeg.JPEGEncodeParam;
    import com.sun.image.codec.jpeg.JPEGImageEncoder;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import javax.imageio.ImageIO;
    import javax.swing.ImageIcon;
     
    /**
    * JPEG Resizer
    * @author Jean-René Thies
    */
    public class Resizer {
     
        /**
         * Resize a JPEG file and save it.
         * Either the new width or the new heigth must be greater than zero.
         * If the width is greater than zero, the new height will be calculated.
         * If the width is zero and the height is greater than zero, the width will be calculated.
         *
         * @param inputfile complete path to original jpeg file
         * @param outputfile complete save path
         * @param newWidth width in pixel
         * @param newHeight height in pixel
         * @return success of resize and save
         */
        public static boolean resize(String inputfile, String outputfile, int newWidth, int newHeight) {
            if (newWidth > 0 || newHeight > 0) {
                try {
                    Image img = new ImageIcon(ImageIO.read(new File(inputfile))).getImage();
     
                    if (newWidth > 0) {
                        float faktor = (float) newWidth / img.getWidth(null);
                        newHeight = (int) (img.getHeight(null) * faktor);
                    } else {
                        float faktor = (float) newHeight / img.getHeight(null);
                        newWidth = (int) (img.getWidth(null) * faktor);
                    }
     
                    Image scaledImage = img.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH);
                    BufferedImage outImg = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
                    Graphics g = outImg.getGraphics();
                    g.drawImage(scaledImage, 0, 0, null);
                    g.dispose();
     
                    JPEGImageEncoder jpegImageEncoder = JPEGCodec.createJPEGEncoder(new FileOutputStream(outputfile));
                    JPEGEncodeParam param = jpegImageEncoder.getDefaultJPEGEncodeParam(outImg);
                    param.setQuality(0.9F, true);
                    jpegImageEncoder.encode(outImg, param);
                    return true;
                } catch (IOException e) {
                    e.printStackTrace();
                    return false;
                }
            } else {
                return false;
            }
        }
    }

    Die "resize"-Methode nimmt den Pfad der Originaldatei und den der zu speichernden Datei an, außerdem die gewünschte Breite oder Höhe - eine der beiden Angaben kann 0 sein, dann wird der andere Wert angenommen und entsprechend proportional skaliert. Die Bildqualität des Outputs ist in der Methode selbst anpassbar.
    Wie die Importe zeigen, ist eine Java-Version von Sun nötig.

    Einen Kommentar hinterlassen »

    Noch kein Feedback

    Einen Kommentar hinterlassen


    Ihre E-Mail-Adresse wird nicht auf dieser Seite angezeigt.

    Ihr URL wird angezeigt.
    (Zeilenumbrüche werden zu <br />)
    (Name, E-Mail-Adresse & Webseite)
    (Benutzern erlauben, Sie durch ein Kontaktformular zu kontaktieren (Ihre E-Mail-Adresse wird nicht weitergegeben))

    ©2010 by Jean-René Thies

    Kontakt |