From 8cab6e94514c38151b2e0c53c9df47c6e1682e28 Mon Sep 17 00:00:00 2001 From: ulrich Date: Thu, 21 Jan 2021 19:21:56 +0000 Subject: [PATCH] Anpassungen Foto UI fertig, jQuery ausgebaut --- src/java/de/uhilger/filecms/api/HtmlExportService.java | 112 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 110 insertions(+), 2 deletions(-) diff --git a/src/java/de/uhilger/filecms/api/HtmlExportService.java b/src/java/de/uhilger/filecms/api/HtmlExportService.java index 497e948..9dbee4a 100644 --- a/src/java/de/uhilger/filecms/api/HtmlExportService.java +++ b/src/java/de/uhilger/filecms/api/HtmlExportService.java @@ -20,6 +20,7 @@ package de.uhilger.filecms.api; +import de.uhilger.wbx.Bild; import java.io.BufferedReader; import java.io.File; import java.io.FileFilter; @@ -29,6 +30,7 @@ import java.io.PrintWriter; import java.util.logging.Level; import java.util.logging.Logger; +import net.coobird.thumbnailator.Thumbnails; import org.apache.commons.io.FileUtils; /** @@ -51,9 +53,9 @@ * * Es werden nur .htmi-Dateien exortiert, die im mit relPath bezeichneten * Ordner liegen. Eventuell in darin befindlichen Unterordnern befindliche - * .htmk-Dateien werden nicht exportiert. + * .htmi-Dateien werden nicht exportiert. * - * Es sollten also keine komplexen Webseiten-Strukturen mit dieser Methode + * Es sollen keine komplexen Webseiten-Strukturen mit dieser Methode * erzeugt werden sondern einfache Dokumente mit einer oder wenigen * einzelnen Dateien. * @@ -94,6 +96,7 @@ String line = br.readLine(); while(line != null) { w.print(line.replace("htmi", "html")); + w.print("\r\n"); line = br.readLine(); } printFooter(w); @@ -126,12 +129,95 @@ if(stile.exists()) { FileUtils.copyFile(stile, new File(outDir, "stile.css"), true); } + buildThumbnailImages(outDir, new Bild()); + + File lbDir = new File(catalinaBase, "webapps/jslib/lightbox/"); + FileUtils.copyDirectoryToDirectory(lbDir, outDir); + + File jqDir = new File(catalinaBase, "webapps/jslib/jquery/"); + FileUtils.copyDirectoryToDirectory(jqDir, outDir); + + File lbimgDir = new File(catalinaBase, "webapps/jslib/lightbox/img"); + FileUtils.copyDirectoryToDirectory(lbimgDir, outDir); + + result = "Export nach HTML ausgefuehrt."; } catch (IOException ex) { result = ex.getLocalizedMessage(); logger.log(Level.SEVERE, ex.getLocalizedMessage(), ex); } return result; + } + + /** + * Minituransichten der Bilddateien erzeugen, die beim HTML-Export + * entstanden sind. + * + * Die Methode erstellt fuer alle Dateien mit Endung png oder jpg + * eine weitere Bilddatei mit Namen [Name]_tn.[Endung]. Also z.B. + * bild_tn.jpg fuer die Datei bild.jpg + */ + private void buildThumbnailImages(File dir, Bild bild) { + logger.fine("Minituransichten dir: " + dir.getAbsolutePath()); + File[] files = dir.listFiles(new ImageFileFilter()); + if(files != null) { + for(int i = 0; i < files.length; i++) { + if(files[i].isDirectory()) { + buildThumbnailImages(files[i], bild); + } else { + String absPath = files[i].getAbsolutePath(); + logger.fine("Miniaturansicht fuer Bild " + absPath); + String fname = files[i].getName(); + logger.fine("fname: " + fname); + int dotPos = fname.lastIndexOf("."); + logger.fine("dotPos: " + dotPos); + StringBuffer tnFileName = new StringBuffer(); + if(dotPos > -1) { + String fname_no_ext = fname.substring(0, dotPos); + logger.fine("fname_no_ext: " + fname_no_ext); + String fext = fname.substring(dotPos); + logger.fine("fext: " + fext); + tnFileName.append(fname_no_ext); + tnFileName.append("_tn"); + //tnFileName.append("."); + tnFileName.append(fext); + } else { + tnFileName.append(fname); + tnFileName.append("_tn"); + } + String outFileName = new File(dir, tnFileName.toString()).getAbsolutePath(); + logger.fine("outFileName: " + outFileName); + + try { + Thumbnails.of(absPath) + .size(bild.getVariantenGroesse(Bild.WINZIG), bild.getVariantenGroesse(Bild.WINZIG)) + .keepAspectRatio(true) + .outputQuality(0.7) + .toFile(outFileName); + } catch (IOException ex) { + logger.log(Level.SEVERE, ex.getLocalizedMessage(), ex); + } + /* + Image image = Toolkit.getDefaultToolkit().getImage(absPath); + MediaTracker mediaTracker = new MediaTracker(new Container()); + mediaTracker.addImage(image, 0); + try { + mediaTracker.waitForID(0); + + if (!mediaTracker.isErrorAny()) { + bild.writeImageFile(image, bild.getVariantenGroesse(Bild.WINZIG), bild.getMimeType(files[i]), outFileName); + } else { + logger.fine("Fehler: Miniaturansicht konnte nicht erzeugt werden"); + } + } catch (InterruptedException | IOException ex) { + logger.log(Level.SEVERE, ex.getLocalizedMessage(), ex); + } + */ + } + } + } else { + logger.fine("files ist null"); + } } private String stripExt(String name) { @@ -155,15 +241,37 @@ } + public class ImageFileFilter implements FileFilter { + + @Override + public boolean accept(File pathname) { + boolean doAccept = false; + String lcName = pathname.getName().toLowerCase(); + if( lcName.endsWith(".jpg") || + lcName.endsWith(".jpeg") || + lcName.endsWith(".png") || + pathname.isDirectory()) { + if(!lcName.contains("_tn")) { + doAccept = true; + } + } + return doAccept; + } + + } + private void printHeader(PrintWriter out) throws IOException { out.print("<!DOCTYPE html><html><head>\r\n"); out.print("<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"/>"); out.print("<link rel=\"stylesheet\" type=\"text/css\" href=\"bootstrap.min.css\">\r\n"); + out.print("<link rel=\"stylesheet\" type=\"text/css\" href=\"lightbox/lightbox.css\">\r\n"); out.print("<link rel=\"stylesheet\" type=\"text/css\" href=\"stile.css\">\r\n"); out.print("</head><body class=\"p-3\">\r\n"); } private void printFooter(PrintWriter out) throws IOException { + out.print("<script src=\"jquery/jquery.min.js\"></script>\r\n"); + out.print("<script src=\"lightbox/lightbox.min.js\"></script>\r\n"); out.print("</body></html>"); } -- Gitblit v1.9.3