From 874757d581444ecaf1c65836b00bc91e41cfc9ce Mon Sep 17 00:00:00 2001 From: ulrich <undisclosed> Date: Mon, 28 Aug 2017 13:08:00 +0000 Subject: [PATCH] bilder-Skript aufgeraeumt --- src/bilder-alt.groovy | 234 +++++++++++++++++++++++++++++ src/bilder.groovy | 225 +++++++-------------------- 2 files changed, 295 insertions(+), 164 deletions(-) diff --git a/src/bilder-alt.groovy b/src/bilder-alt.groovy new file mode 100644 index 0000000..4bab866 --- /dev/null +++ b/src/bilder-alt.groovy @@ -0,0 +1,234 @@ +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); + } +} + + + + + diff --git a/src/bilder.groovy b/src/bilder.groovy index 4bab866..c7e9131 100644 --- a/src/bilder.groovy +++ b/src/bilder.groovy @@ -21,141 +21,59 @@ der Klasse Bild */ -File inFile = new File(args[1]); +FileNameMap fileNameMap = URLConnection.getFileNameMap(); +int width = Integer.parseInt(args[0]); +int height = width; +String inDirName = args[1]; +String outDirName = args[2]; +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"); -} - - - -/* - 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 quality = 90; + float factor = (float) 0.0; + + 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); @@ -163,13 +81,12 @@ // 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}; @@ -187,48 +104,28 @@ 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); - } -} - - - - - + // 30.7.2007: sharpening hinzugefuegt (Ende) + + 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); + } + } catch (InterruptedException ex) { + System.out.println("Error: " + ex.getLocalizedMessage()); + } + + } +} else { + System.out.println("fileList is null or empty"); +} \ No newline at end of file -- Gitblit v1.9.3