| « Scala-Anwendungen außerhalb von Netbeans starten | CatchUp - hinter den Kulissen » |
JPEG Resizer
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.