Klassenbiliothek fuer Dateiverwaltung
ulrich
2025-03-13 76c1ec5c9d4ab8c299f2c081b43a7456dece5fef
Bildrotation hinzugefuegt
1 files added
2 files modified
75 ■■■■■ changed files
README.md 8 ●●●● patch | view | raw | blame | history
src/de/uhilger/fm/Catalog.java 5 ●●●● patch | view | raw | blame | history
src/de/uhilger/fm/Rotor.java 62 ●●●●● patch | view | raw | blame | history
README.md
@@ -14,17 +14,17 @@
## Abhängigkeiten
fm erfordert die Klassenbibliothek [Gson](https://google.github.io/gson/).
fm erfordert die Klassenbibliotheken [Gson](https://google.github.io/gson/) und [Thumbnailator](https://github.com/coobird/thumbnailator).
## Klassenbibliothek herstellen
fm ist zur Nutzung im Zusammenspiel mit anderen Programmen vorgesehen und wird dazu am besten als Klassenbibliothek genutzt. Es wird angenommen, dass die oben aufgeführte Bibliothek gson lokal an einem Ort abgelegt ist, dessen Pfad mit dem Platzhalter `$JLIB` gemeint ist. Zur Herstellung einer Klassenbibliothek werden mit Hilfe der wie zuvor beschrieben geladenen Teile die folgenden Kommandos ausgeführt (Beispiel für Linux):
fm ist zur Nutzung im Zusammenspiel mit anderen Programmen vorgesehen und wird dazu am besten als Klassenbibliothek genutzt. Es wird angenommen, dass die oben aufgeführten Bibliotheken lokal an einem Ort abgelegt sind, deren Pfad mit dem Platzhalter `$JLIB` gemeint ist. Zur Herstellung einer Klassenbibliothek werden mit Hilfe der wie zuvor beschrieben geladenen Teile die folgenden Kommandos ausgeführt (Beispiel für Linux):
```
cd $FM
mkdir classes
mkdir dist
$JDK/bin/javac -classpath $JLIB/gson-2.8.6.jar -d classes src/de/uhilger/fm/*.java
$JDK/bin/javac -classpath $JLIB/gson-2.8.6.jar:$JLIB/thumbnailator.jar -d classes src/de/uhilger/fm/*.java
$JDK/bin/jar -cf dist/fm.jar -C classes .
```
@@ -32,7 +32,7 @@
## Klassenbibliothek verwenden
Zur Verwendung der Klassen von fm wird die Klassenbibliothek in den Classpath des Programmes aufgenommen, von dem aus fm genutzt werden soll. Neben fm wird zudem die Klassenbibliothek [Gson](https://google.github.io/gson/) benötigt.
Zur Verwendung der Klassen von fm wird die Klassenbibliothek in den Classpath des Programmes aufgenommen, von dem aus fm genutzt werden soll. Neben fm werden zudem die Klassenbibliotheken [Gson](https://google.github.io/gson/) und [Thumbnailator](https://github.com/coobird/thumbnailator) benötigt.
## Lizenz
src/de/uhilger/fm/Catalog.java
@@ -72,10 +72,13 @@
        if (lowerName.endsWith(ImageFileFilter.JPEG)
                || lowerName.endsWith(ImageFileFilter.JPG)
                || lowerName.endsWith(ImageFileFilter.PNG)) {
          String lastModified = Long.toString(file.lastModified());
          datei.setBild(true);
          String ext = dateiName.substring(dateiName.lastIndexOf(STR_DOT));
          String ohneExt = dateiName.substring(0, dateiName.lastIndexOf(STR_DOT));
          datei.setMiniurl(urlBase + /*"/" + */ relPathAndName + ohneExt + ImageFileFilter.TN + ext);
          datei.setMiniurl(urlBase + /*"/" + */ relPathAndName + ohneExt +
                  ImageFileFilter.TN + ext + "?lm=" + lastModified);
          //buildImgSrc(file, datei, ohneExt, ext);
        }
        liste.add(datei);
src/de/uhilger/fm/Rotor.java
New file
@@ -0,0 +1,62 @@
/*
  fm - File management class library
  Copyright (C) 2024, 2025  Ulrich Hilger
  This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU Affero General Public License as
  published by the Free Software Foundation, either version 3 of the
  License, or (at your option) any later version.
  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU Affero General Public License for more details.
  You should have received a copy of the GNU Affero General Public License
  along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */
package de.uhilger.fm;
import java.io.File;
import java.io.IOException;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.Path;
import net.coobird.thumbnailator.Thumbnails;
/**
 * Rotieren von Bilddateien
 *
 * @author Ulrich Hilger
 * @version 0.1, 12.03.2025
 */
public class Rotor {
  /**
   * Eine Bilddatei mit allen Varianten rotieren
   *
   * Fuer jede Datei mit Endung jpg, jpeg und png werden alle Varianten wie zum Beispiel
   * dateiname.jpg, dateiname_kl.jpg, dateiname_gr.jpg, dateiname_gr_b64.jpg usw.beruecksichtigt,
   * also dateiname*.jpg.
   *
   * @param srcFile die Bilddatei, deren Varianten beruecksichtigt werden sollen
   * @param rotation Rotation in Grad, negative Werte rotieren gegen den Uhrzeigersinn
   * @throws IOException wenn etwas schief geht
   */
  public void rotateImgFiles(File srcFile, int rotation) throws IOException {
    String fnameext = srcFile.getName();
    int dotpos = fnameext.lastIndexOf(".");
    String fname = fnameext.substring(0, dotpos);
    String ext = fnameext.substring(dotpos);
    DirectoryStream<Path> stream = Files.newDirectoryStream(srcFile.getParentFile().toPath(),
            fname + "*" + ext);
    for (Path path : stream) {
      File file = path.toFile();
                Thumbnails.of(file)
                  .scale(1.0)
                  .rotate(rotation)
                  .toFile(file);
    }
    stream.close();
  }
}