src/de/uhilger/bildhelfer/Koordinator.java | ●●●●● patch | view | raw | blame | history | |
src/de/uhilger/bildhelfer/OrdnerVerarbeiter.java | ●●●●● patch | view | raw | blame | history | |
src/de/uhilger/bildhelfer/Verkleinerer.java | ●●●●● patch | view | raw | blame | history |
src/de/uhilger/bildhelfer/Koordinator.java
@@ -1,7 +1,18 @@ package de.uhilger.bildhelfer; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; /** * Verkleinern von Bilddateien mit der Endung jpeg, jpg oder png * * Ausfuehren auf der Kommandozeile mit: * java -jar liste * java -jar verkleinern 1920 0.7 /media/extssd/Bildarchiv/Film /home/ulli/Bilder/film-1920 * java -jar stapel 1920 0.7 /media/extssd/Bildarchiv/Film /home/ulli/Bilder/film-1920 */ public class Koordinator { @@ -12,14 +23,32 @@ if(args[0].equals("verkleinern")) { verkleinern(args); } else if(args[0].equals("liste")) { // TODO liste System.out.println("Bilder in einzelnem Ordner verarbeiten:"); System.out.println(" java -jar bildhelfer.jar verkleinern groesse qualitaet eingangsordner ausgabeordner"); System.out.println("Ganze Ordnerstruktur mit Bildern verarbeiten:"); System.out.println(" java -jar bildhelfer.jar stapel groesse qualitaet eingangsordner ausgabeordner"); System.out.println("groesse: Anzahl Bildpunkte entlang der laengsten Kante als Ganzzahl"); System.out.println("qualitaet: Prozentwert als Fliesskommazahl, z.B. 0.75 fuer 75%"); } else if(args[0].equals("stapel")) { stapelverarbeitung(args); } else { logger.info("Fehlendes oder ungueltiges Kommando, gueltige Kommandos mit java -jar imagetool.jar liste"); logger.info("Fehlendes oder ungueltiges Kommando. Gueltige Kommandos mit java -jar bildhelfer.jar liste"); } } } private void stapelverarbeitung(String[] args) { try { System.out.println(args[0] + " " + args[1] + " " + args[2] + " " + args[3] + " " + args[4]); OrdnerVerarbeiter ov = new OrdnerVerarbeiter(); Verkleinerer v = new Verkleinerer(); ov.verarbeiten(v, args[1], args[2], args[3], args[4]); } catch (IOException ex) { Logger.getLogger(Koordinator.class.getName()).log(Level.SEVERE, null, ex); } } private void verkleinern(String[] args) { if(args.length < 5) { logger.info("Es muessen 4 Parameter sein: groesse, qualitaet, eingangsordner, ausgabeordner"); src/de/uhilger/bildhelfer/OrdnerVerarbeiter.java
New file @@ -0,0 +1,32 @@ package de.uhilger.bildhelfer; import java.io.File; import java.io.IOException; /** * * @author ulli */ public class OrdnerVerarbeiter { public void verarbeiten(Verkleinerer v, String gr, String q, String eingabeOrdner, String ausgabeOrdner) throws IOException { File ein = new File(eingabeOrdner); File[] inhalt = ein.listFiles(); for(int i = 0; i < inhalt.length; i++) { String dateiname = inhalt[i].getName(); if(inhalt[i].isDirectory()) { System.out.println("Ordner " + dateiname); String arbeitsOrdner = new File(ausgabeOrdner, dateiname).getAbsolutePath(); File ziel = new File(arbeitsOrdner); if(!ziel.exists()) { ziel.mkdir(); } v.dateienVerarbeiten(v.getIntFromArg(gr, 1920), v.getFloatFromArg(q, (float) 0.7), inhalt[i].getAbsolutePath(), arbeitsOrdner); verarbeiten(v, gr, q, inhalt[i].getAbsolutePath(), arbeitsOrdner); } else { //System.out.println("Datei " + inhalt[i].getName()); } } } } src/de/uhilger/bildhelfer/Verkleinerer.java
@@ -45,7 +45,7 @@ dateienVerarbeiten(groesse, qualitaet, eingangsOrdner.getAbsolutePath(), ausgabeOrdner.getAbsolutePath()); } private int getIntFromArg(String arg, int defaultValue) { public int getIntFromArg(String arg, int defaultValue) { try { int argValue = Integer.parseInt(arg); logger.info("Ausgabegroesse " + argValue); @@ -56,7 +56,7 @@ } } private float getFloatFromArg(String arg, float defaultValue) { public float getFloatFromArg(String arg, float defaultValue) { try { float argValue = Float.parseFloat(arg); logger.info("Ausgabequalitaet " + argValue); @@ -81,13 +81,12 @@ } } private void dateienVerarbeiten(int gr, float quality, String inDirName, String outDirName) { public void dateienVerarbeiten(int gr, float quality, String inDirName, String outDirName) { /* Java-Code zum Verkleinern von Bildern args[0] - Anzahl Pixel an der laengsten Kante args[1] - qualitaet JPEG, z.B. 0.75 fuer 75% des Originals args[1] - qualitaet, z.B. 0.75 fuer 75% des Originals args[2] - Eingangsordner args[3] - Ausgabeordner */ @@ -109,15 +108,14 @@ File outDir = new File(outDirName); File outFile = new File(outDir, fileList[i].getName()); logger.info(outFile.getAbsolutePath()); String fname = fileList[i].getName().toLowerCase(); try { if (fileList[i].isFile() && (fname.endsWith("jpg") || fname.endsWith("jpeg") || fname.endsWith("png"))) { Image image = ImageIO.read(fileList[i]); MediaTracker mediaTracker = new MediaTracker(new Container()); mediaTracker.addImage(image, 0); mediaTracker.waitForID(0); if (!mediaTracker.isErrorAny()) { //float quality = Float.parseFloat(args[1]); float factor = (float) 0.0; BufferedImage thumbImage; int imageWidth = image.getWidth(null); @@ -134,8 +132,7 @@ double imageRatio = (double)imageWidth / (double)imageHeight; if (thumbRatio < imageRatio) { thumbHeight = (int)(thumbWidth / imageRatio); } else { } else { thumbWidth = (int)(thumbHeight * imageRatio); } @@ -152,16 +149,16 @@ graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); graphics2D.drawImage(image, 0, 0, thumbWidth, thumbHeight, null); //float quality = Float.parseFloat(args[1]); float factor = (float) 0.0; // 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]; @@ -193,10 +190,8 @@ imgType = "jpg"; } /* 14.1.2018: Ausgabe um Qualitaetsparameter erweitert Beginn */ // 14.1.2018: Ausgabe um Qualitaetsparameter erweitert Beginn ImageWriter writer = ImageIO.getImageWritersByFormatName(imgType).next(); ImageWriteParam iwp = writer.getDefaultWriteParam(); iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); @@ -204,7 +199,8 @@ writer.setOutput(new FileImageOutputStream(outFile)); writer.write(null, new IIOImage(thumbImage, null, null), iwp); writer.dispose(); /* 14.1.2018 Ende */ // 14.1.2018 Ende } } } catch (InterruptedException ex) { //System.out.println("Error: " + ex.getLocalizedMessage()); @@ -215,13 +211,9 @@ logger.log(Level.SEVERE, e.getLocalizedMessage(), e); } } } else { logger.info("fileList is null or empty"); } } }