From c238daba80c135c658cdf3821516bbbc709dbbcd Mon Sep 17 00:00:00 2001 From: ulrich <not disclosed> Date: Sun, 14 Jan 2018 14:47:41 +0000 Subject: [PATCH] weiter kommentiert --- src/bilder.groovy | 247 ++++++++++++++++-------------------------------- 1 files changed, 83 insertions(+), 164 deletions(-) diff --git a/src/bilder.groovy b/src/bilder.groovy index 4bab866..90294bd 100644 --- a/src/bilder.groovy +++ b/src/bilder.groovy @@ -14,163 +14,88 @@ import java.net.FileNameMap; import java.net.URLConnection; import javax.imageio.ImageIO; +import javax.imageio.ImageWriter; +import javax.imageio.ImageWriteParam; +import javax.imageio.stream.FileImageOutputStream; +import javax.imageio.IIOImage; import java.lang.Integer; /* - Skript zum Verkleinern von Bildern mit Hilfe - der Klasse Bild + Java-Code zum Verkleinern von Bildern + + args[0] - Anzahl Pixel an der laengsten Kante + args[1] - qualitaet JPEG, z.B. 75 fuer 75% + args[2] - Eingangsordner + args[3] - Ausgabeordner */ -File inFile = new File(args[1]); +FileNameMap fileNameMap = URLConnection.getFileNameMap(); +int width = Integer.parseInt(args[0]); +int height = width; +String inDirName = args[2]; +String outDirName = args[3]; +File inFile = new File(inDirName); 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 outDir = new File(outDirName); 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"); -} + float quality = Float.parseFloat(args[1]); + float factor = (float) 0.0; - -/* - 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); + BufferedImage thumbImage; + int imageWidth = image.getWidth(null); int imageHeight = image.getHeight(null); - - int thumbWidth = width; + int thumbWidth = width; int thumbHeight = height; - if(imageWidth < width) { - thumbWidth = imageWidth; - } - if(imageHeight < height) { - thumbHeight = imageHeight; - } + 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); + thumbHeight = (int)(thumbWidth / imageRatio); } else { - thumbWidth = (int)(thumbHeight * imageRatio); + thumbWidth = (int)(thumbHeight * imageRatio); } - + + String mimeType = fileNameMap.getContentTypeFor("file://" + fileList[i].getAbsolutePath()); + // 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); - } + if(mimeType.contains("jpeg") || mimeType.contains("png")) { + thumbImage = new BufferedImage(thumbWidth, thumbHeight, BufferedImage.TYPE_INT_RGB); + } else { + thumbImage = new BufferedImage(thumbWidth, thumbHeight, BufferedImage.TYPE_INT_ARGB); + } 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; - }*/ - + /* + 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]; @@ -188,47 +113,41 @@ 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"; + + 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"; + } + + //ImageIO.write(thumbImage, imgType, outFile); + + /* 14.1.2018 Beginn */ + //File outfile =new File(“/opt/images/modified.jpg”); + ImageWriter writer = ImageIO.getImageWritersByFormatName(imgType).next(); + //ImageWriter writer = iter.next(); + ImageWriteParam iwp = writer.getDefaultWriteParam(); + iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); + iwp.setCompressionQuality(quality); + writer.setOutput(new FileImageOutputStream(outFile)); + writer.write(null, new IIOImage(thumbImage, null, null),iwp); + writer.dispose(); + /* 14.1.2018 Ende */ + + + } + } catch (InterruptedException ex) { + System.out.println("Error: " + ex.getLocalizedMessage()); } - 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); - } + + } +} else { + System.out.println("fileList is null or empty"); } - - - - - -- Gitblit v1.9.3