| New file | 
 |  |  | 
 |  |  | import java.awt.Graphics2D; | 
 |  |  | import java.awt.Image; | 
 |  |  | import java.awt.RenderingHints; | 
 |  |  | import java.awt.image.BufferedImage; | 
 |  |  | import java.awt.image.ConvolveOp; | 
 |  |  | import java.awt.image.Kernel; | 
 |  |  | import java.awt.MediaTracker; | 
 |  |  | import java.awt.Container; | 
 |  |  | import java.awt.Toolkit; | 
 |  |  | import java.io.File; | 
 |  |  | import java.io.FileNotFoundException; | 
 |  |  | import java.io.IOException; | 
 |  |  | import java.io.OutputStream; | 
 |  |  | import java.net.FileNameMap; | 
 |  |  | import java.net.URLConnection; | 
 |  |  | import javax.imageio.ImageIO; | 
 |  |  | import java.lang.Integer; | 
 |  |  |  | 
 |  |  | /* | 
 |  |  |     Skript zum Verkleinern von Bildern mit Hilfe  | 
 |  |  |     der Klasse Bild | 
 |  |  | */ | 
 |  |  |  | 
 |  |  | File inFile = new File(args[1]); | 
 |  |  | File[] fileList = inFile.listFiles(); | 
 |  |  | if(fileList != null && fileList.length > 0) { | 
 |  |  |     for(int i = 0; i < fileList.length; i++) { | 
 |  |  |         System.out.println(fileList[i].getAbsolutePath()); | 
 |  |  | 		 | 
 |  |  |         File outDir = new File(args[2]); | 
 |  |  |         File outFile = new File(outDir, fileList[i].getName()); | 
 |  |  |         System.out.println(outFile.getAbsolutePath()); | 
 |  |  |     //java.awt.Image image = (java.awt.Image) Toolkit.getDefaultToolkit().getImage(fileList[i].getAbsolutePath()); | 
 |  |  |         Image image = ImageIO.read(fileList[i]); | 
 |  |  |     MediaTracker mediaTracker = new MediaTracker(new Container()); | 
 |  |  |     mediaTracker.addImage(image, 0); | 
 |  |  |     try { | 
 |  |  |       mediaTracker.waitForID(0); | 
 |  |  |       if (!mediaTracker.isErrorAny()) { | 
 |  |  |         Bild bild = new Bild(); | 
 |  |  |         bild.writeImageFile(image, Integer.parseInt(args[0]), bild.getMimeType(fileList[i]), new File(outDir, fileList[i].getName()).getAbsolutePath()); | 
 |  |  |       } | 
 |  |  |     } catch (InterruptedException ex) { | 
 |  |  |       System.out.println("Error: " + ex.getLocalizedMessage()); | 
 |  |  |     }		 | 
 |  |  | 		 | 
 |  |  |     } | 
 |  |  | } else { | 
 |  |  |     System.out.println("fileList is null or empty"); | 
 |  |  | } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  | /* | 
 |  |  |     Klasse Bild | 
 |  |  | */ | 
 |  |  |  | 
 |  |  | public class Bild { | 
 |  |  |    | 
 |  |  |   public static final int WINZIG = 0; | 
 |  |  |   public static final int KLEIN = 1; | 
 |  |  |   public static final int SEMI = 2; | 
 |  |  |   public static final int MITTEL = 3; | 
 |  |  |   public static final int GROSS = 4; | 
 |  |  |    | 
 |  |  |   public String[] GRNAME; // = {"-w", "-k", "-s", "-m", "-g"}; | 
 |  |  |   public int[] GR; // = {120, 240, 500, 700, 1200}; | 
 |  |  | 	 | 
 |  |  |     public Bild() { | 
 |  |  |         GRNAME = new String[5] | 
 |  |  |         GRNAME[0] = "-w"; | 
 |  |  |         GRNAME[1] = "-k"; | 
 |  |  |         GRNAME[2] = "-s"; | 
 |  |  |         GRNAME[3] = "-m"; | 
 |  |  |         GRNAME[4] = "-g"; | 
 |  |  | 		 | 
 |  |  |         GR = new int[5]; | 
 |  |  |         GR[0] = 120; | 
 |  |  |         GR[1] = 240; | 
 |  |  |         GR[2] = 500; | 
 |  |  |         GR[3] = 700; | 
 |  |  |         GR[4] = 1200; | 
 |  |  | 		 | 
 |  |  |     } | 
 |  |  |    | 
 |  |  |   public void writeImageStream(Image image, int gr, String mimeType, OutputStream out) throws InterruptedException, IOException { | 
 |  |  |     ImageIO.write(getReducedImage(image, gr, mimeType), imgType(mimeType), out); | 
 |  |  |   } | 
 |  |  |    | 
 |  |  |   /** | 
 |  |  |    *  | 
 |  |  |    * @param image | 
 |  |  |    * @param gr | 
 |  |  |    * @param mimeType | 
 |  |  |    * @param vName Name der verkleinerten Datei | 
 |  |  |    * @throws InterruptedException | 
 |  |  |    * @throws IOException  | 
 |  |  |    */ | 
 |  |  |   public void writeImageFile(BufferedImage image, int gr, String mimeType, String vName) throws InterruptedException, IOException { | 
 |  |  |     ImageIO.write(getReducedImage(image, gr, mimeType), imgType(mimeType), new File(vName)); | 
 |  |  |   } | 
 |  |  |    | 
 |  |  |   private BufferedImage getReducedImage(Image image, int gr, String mimeType) throws InterruptedException, IOException { | 
 |  |  |     BufferedImage img; | 
 |  |  |     int q = 90; | 
 |  |  |     float sh = (float) 0.0; | 
 |  |  |     if(mimeType.contains("jpeg")) { | 
 |  |  |       img = getReducedImageImpl(image, gr, gr, q, sh, false); | 
 |  |  |     } else { | 
 |  |  |       img = getReducedImageImpl(image, gr, gr, q, sh, true); | 
 |  |  |     } | 
 |  |  |     return img; | 
 |  |  |   } | 
 |  |  |   | 
 |  |  |   /** | 
 |  |  |    * Eine in Groesse und Qualitaet verringerte Bilddatei erzeugen | 
 |  |  |    * @param image  Ablageort und Name der Bilddatei | 
 |  |  |    * @param width  neue Breite | 
 |  |  |    * @param height  neue hoehe | 
 |  |  |    * @param quality neue Qualitaet (0 - 100) | 
 |  |  |    * @param factor Faktor fuer Schaerfe / Unschaerfe (z.B. -0.15f fuer leichte Unschaerfe, 0.05f fuer leichtes Nachschaerfen) | 
 |  |  |    * @param withTransparency ob Transparenz benoetigt wird | 
 |  |  |    * @return neues, in Groesse und Qualitaet entsprechend verringertes Bild | 
 |  |  |    * @throws java.lang.InterruptedException | 
 |  |  |    * @throws java.io.FileNotFoundException | 
 |  |  |    */ | 
 |  |  |   public BufferedImage getReducedImageImpl(BufferedImage image, int width, int height, int quality, float factor, boolean withTransparency)  | 
 |  |  |   throws InterruptedException, FileNotFoundException, IOException { | 
 |  |  |   | 
 |  |  |     int imageWidth = image.getWidth(null); | 
 |  |  |         int imageHeight = image.getHeight(null); | 
 |  |  |   | 
 |  |  |       int thumbWidth = width; | 
 |  |  |         int thumbHeight = height; | 
 |  |  |     if(imageWidth < width) { | 
 |  |  |       thumbWidth = imageWidth;     | 
 |  |  |     } | 
 |  |  |     if(imageHeight < height) { | 
 |  |  |       thumbHeight = imageHeight; | 
 |  |  |     } | 
 |  |  |         double thumbRatio = (double)thumbWidth / (double)thumbHeight; | 
 |  |  |         double imageRatio = (double)imageWidth / (double)imageHeight; | 
 |  |  |         if (thumbRatio < imageRatio) { | 
 |  |  |             thumbHeight = (int)(thumbWidth / imageRatio); | 
 |  |  |         } | 
 |  |  |         else { | 
 |  |  |             thumbWidth = (int)(thumbHeight * imageRatio); | 
 |  |  |         } | 
 |  |  |   | 
 |  |  |         // draw original image to thumbnail image object and | 
 |  |  |         // scale it to the new size on-the-fly | 
 |  |  |         //BufferedImage thumbImage = new BufferedImage(thumbWidth, thumbHeight, BufferedImage.TYPE_INT_RGB); | 
 |  |  |     BufferedImage thumbImage; | 
 |  |  |     if(withTransparency) { | 
 |  |  |         thumbImage = new BufferedImage(thumbWidth, thumbHeight, BufferedImage.TYPE_INT_ARGB); | 
 |  |  |     } else { | 
 |  |  |       thumbImage = new BufferedImage(thumbWidth, thumbHeight, BufferedImage.TYPE_INT_RGB); | 
 |  |  |     } | 
 |  |  |         Graphics2D graphics2D = thumbImage.createGraphics(); | 
 |  |  |         graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); | 
 |  |  |         graphics2D.drawImage(image, 0, 0, thumbWidth, thumbHeight, null); | 
 |  |  |   | 
 |  |  |         // 30.7.2007: sharpening hinzugefuegt (Anfang) | 
 |  |  |         //float factor = -0.15f; // minus = sharpen, plus = soften | 
 |  |  |         //float[] sharpenArray = {0, -1, 0, -1, 5, -1, 0, -1, 0}; | 
 |  |  |      | 
 |  |  |     /* | 
 |  |  |       30.6.2013: sharpening als Weichmacher nur, wenn Bild < 400 | 
 |  |  |     */ | 
 |  |  |     /*if(thumbWidth < 400 || thumbHeight < 400) { | 
 |  |  |       factor = 0.1f; | 
 |  |  |     }*/ | 
 |  |  |      | 
 |  |  |         if(factor != (float) 0.0) { | 
 |  |  |             //float[] array = {0, factor, 0, factor, 1-(factor*4), factor, 0, factor, 0}; | 
 |  |  |                         float[] array = new float[9]; | 
 |  |  |                         array[0] = 0; | 
 |  |  |                         array[1] = factor; | 
 |  |  |                         array[2] = 0; | 
 |  |  |                         array[3] = factor; | 
 |  |  |                         array[4] = 1-(factor*4); | 
 |  |  |                         array[5] = factor; | 
 |  |  |                         array[6] = 0; | 
 |  |  |                         array[7] = factor; | 
 |  |  |                         array[8] = 0; | 
 |  |  |             Kernel kernel = new Kernel(3, 3, array); | 
 |  |  |             ConvolveOp cOp = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null); | 
 |  |  |             thumbImage = cOp.filter(thumbImage, null); | 
 |  |  |         } | 
 |  |  |         // 30.7.2007: sharpening hinzugefuegt (Ende) | 
 |  |  |      | 
 |  |  |     return thumbImage; | 
 |  |  |   } | 
 |  |  |    | 
 |  |  |   public String imgType(String mimeType) { | 
 |  |  |     String imgType; | 
 |  |  |     if(mimeType.contains("jpg")) { | 
 |  |  |       imgType = "jpg"; | 
 |  |  |     } else if(mimeType.contains("jpeg")) { | 
 |  |  |       imgType = "jpg"; | 
 |  |  |     } else if(mimeType.contains("png")) { | 
 |  |  |       imgType = "png"; | 
 |  |  |     } else if(mimeType.contains("gif")) { | 
 |  |  |       imgType = "gif"; | 
 |  |  |     } else { | 
 |  |  |       imgType = "jpg"; | 
 |  |  |     } | 
 |  |  |     return imgType; | 
 |  |  |   } | 
 |  |  |    | 
 |  |  |   /** | 
 |  |  |    *  | 
 |  |  |    * @param v Bild.WINZIG .. Bild.GROSS | 
 |  |  |    * @return Länge der längsten Kante in Bildpunkten | 
 |  |  |    */ | 
 |  |  |   public int getVariantenGroesse(int v) { | 
 |  |  |     return GR[v]; | 
 |  |  |   } | 
 |  |  |    | 
 |  |  |   public String getVariantenName(int v) { | 
 |  |  |     return GRNAME[v]; | 
 |  |  |   } | 
 |  |  |    | 
 |  |  |   public String getMimeType(File file) { | 
 |  |  |     String absName = file.getAbsolutePath(); | 
 |  |  |     FileNameMap fileNameMap = URLConnection.getFileNameMap(); | 
 |  |  |     return fileNameMap.getContentTypeFor("file://" + absName);     | 
 |  |  |   } | 
 |  |  | } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  |