From ae1d6348242c3be10a38586c9d21f6187787e8cd Mon Sep 17 00:00:00 2001
From: ulrich
Date: Fri, 11 Feb 2022 07:09:30 +0000
Subject: [PATCH] Stapelverarbeitung und Einschraenkung auf jpeg, jpg und png hinzugefuegt
---
src/de/uhilger/bildhelfer/OrdnerVerarbeiter.java | 32 ++++++
src/de/uhilger/bildhelfer/Verkleinerer.java | 216 ++++++++++++++++++++----------------------
src/de/uhilger/bildhelfer/Koordinator.java | 33 ++++++
3 files changed, 167 insertions(+), 114 deletions(-)
diff --git a/src/de/uhilger/bildhelfer/Koordinator.java b/src/de/uhilger/bildhelfer/Koordinator.java
index e58044d..77cff37 100644
--- a/src/de/uhilger/bildhelfer/Koordinator.java
+++ b/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");
diff --git a/src/de/uhilger/bildhelfer/OrdnerVerarbeiter.java b/src/de/uhilger/bildhelfer/OrdnerVerarbeiter.java
new file mode 100644
index 0000000..bed3bf5
--- /dev/null
+++ b/src/de/uhilger/bildhelfer/OrdnerVerarbeiter.java
@@ -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());
+ }
+ }
+ }
+
+}
diff --git a/src/de/uhilger/bildhelfer/Verkleinerer.java b/src/de/uhilger/bildhelfer/Verkleinerer.java
index 414383d..e089be1 100644
--- a/src/de/uhilger/bildhelfer/Verkleinerer.java
+++ b/src/de/uhilger/bildhelfer/Verkleinerer.java
@@ -29,14 +29,14 @@
int groesse = getIntFromArg(args[1], 1200);
float qualitaet = getFloatFromArg(args[2], (float) 0.7);
File eingangsOrdner = getFileFromArg(args[3]);
- if(eingangsOrdner == null) {
+ if (eingangsOrdner == null) {
logger.info("Eingangsordner konnte nicht bestimmt werden, Abbruch.");
return;
} else {
logger.info("Eingangsordner " + eingangsOrdner);
}
File ausgabeOrdner = getFileFromArg(args[4]);
- if(ausgabeOrdner == null) {
+ if (ausgabeOrdner == null) {
logger.info("Ausgabeordner konnte nicht bestimmt werden, Abbruch.");
return;
} else {
@@ -45,23 +45,23 @@
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);
return argValue;
- } catch(Exception ex) {
+ } catch (Exception ex) {
logger.info("Ausgabegroesse konnte nicht ermittelt werden, es wird der Standardwert " + defaultValue + " verwendet.");
return defaultValue;
}
}
- private float getFloatFromArg(String arg, float defaultValue) {
+ public float getFloatFromArg(String arg, float defaultValue) {
try {
float argValue = Float.parseFloat(arg);
logger.info("Ausgabequalitaet " + argValue);
return argValue;
- } catch(Exception ex) {
+ } catch (Exception ex) {
logger.info("Ausgabequalitaet konnte nicht ermittelt werden, es wird der Standardwert " + defaultValue + " verwendet.");
return defaultValue;
}
@@ -70,27 +70,26 @@
private File getFileFromArg(String arg) {
try {
File f = new File(arg);
- if(!f.exists()) {
+ if (!f.exists()) {
return null;
} else {
return f;
}
- } catch(Exception ex) {
+ } catch (Exception ex) {
logger.log(Level.SEVERE, ex.getLocalizedMessage(), ex);
return null;
}
}
-
- 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
-*/
+ */
FileNameMap fileNameMap = URLConnection.getFileNameMap();
//int width = Integer.parseInt(args[0]);
@@ -100,8 +99,8 @@
//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++) {
+ if (fileList != null && fileList.length > 0) {
+ for (int i = 0; i < fileList.length; i++) {
//System.out.println(fileList[i].getAbsolutePath());
logger.fine(fileList[i].getAbsolutePath());
@@ -109,102 +108,99 @@
File outDir = new File(outDirName);
File outFile = new File(outDir, fileList[i].getName());
logger.info(outFile.getAbsolutePath());
+ String fname = fileList[i].getName().toLowerCase();
try {
- Image image = ImageIO.read(fileList[i]);
- MediaTracker mediaTracker = new MediaTracker(new Container());
- mediaTracker.addImage(image, 0);
- mediaTracker.waitForID(0);
- if (!mediaTracker.isErrorAny()) {
+ 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);
+ 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);
+ }
- BufferedImage thumbImage;
- int imageWidth = image.getWidth(null);
- int imageHeight = image.getHeight(null);
- int thumbWidth = width;
- int thumbHeight = height;
- if(imageWidth < width) {
- thumbWidth = imageWidth;
+ 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
+ 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);
+
+ //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;
+ //}
+ 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)
+
+ 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";
+ }
+
+ // 14.1.2018: Ausgabe um Qualitaetsparameter erweitert Beginn
+
+ ImageWriter writer = ImageIO.getImageWritersByFormatName(imgType).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
}
- 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);
- }
-
- 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
- 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;
- }*/
-
- 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)
-
- 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";
- }
-
- /*
- 14.1.2018: Ausgabe um Qualitaetsparameter erweitert
- Beginn
- */
- ImageWriter writer = ImageIO.getImageWritersByFormatName(imgType).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());
@@ -215,13 +211,9 @@
logger.log(Level.SEVERE, e.getLocalizedMessage(), e);
}
}
+
} else {
logger.info("fileList is null or empty");
}
}
}
-
-
-
-
-
--
Gitblit v1.9.3