ulrich
2022-02-11 ae1d6348242c3be10a38586c9d21f6187787e8cd
Stapelverarbeitung und Einschraenkung auf jpeg, jpg und png hinzugefuegt
2 files modified
1 files added
109 ■■■■ changed files
src/de/uhilger/bildhelfer/Koordinator.java 33 ●●●●● patch | view | raw | blame | history
src/de/uhilger/bildhelfer/OrdnerVerarbeiter.java 32 ●●●●● patch | view | raw | blame | history
src/de/uhilger/bildhelfer/Verkleinerer.java 44 ●●●●● 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");
    }
  }
}