Bilder mit Neon 2 verwenden
ulrich
2024-02-23 ef2fb290f1beb606a11eaa06f8f883ee55e5d124
commit | author | age
ef2fb2 1 /*
U 2   neon-image - Image extensions to Neon
3   Copyright (C) 2024  Ulrich Hilger
4
5   This program is free software: you can redistribute it and/or modify
6   it under the terms of the GNU Affero General Public License as
7   published by the Free Software Foundation, either version 3 of the
8   License, or (at your option) any later version.
9
10   This program is distributed in the hope that it will be useful,
11   but WITHOUT ANY WARRANTY; without even the implied warranty of
12   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13   GNU Affero General Public License for more details.
14
15   You should have received a copy of the GNU Affero General Public License
16   along with this program.  If not, see <https://www.gnu.org/licenses/>.
17  */
18 package de.uhilger.neon.image;
19
20 import com.sun.net.httpserver.Filter;
21 import com.sun.net.httpserver.HttpExchange;
22 import de.uhilger.neon.FileServer;
23 import java.io.IOException;
24
25 /**
26  * Der ImageFilter erzeugt verkleinerte Versionen einer Bilddatei 
27  * nach Bedarf. Wenn die gewuenschte Dateigroesse noch nicht existiert 
28  * oder die Originaldatei neuer ist als die verkleinerte Fassung, 
29  * wird die verkleinerte Fassung neu erzeugt.
30  * 
31  * Fuer jede Anfrage, wird geprueft ob eine Bilddatei angefragt ist, 
32  * deren Dateiname einen der folgenden Namenszusaetze enthaelt:
33  *
34  * 120 - "_tn"
35  * 240 - "_kl"
36  * 500 - "_sm"
37  * 700 - "_mt"
38  * 1200 - "_gr"
39  * 
40  * Fuer diese wird geprueft, ob die Datei existiert. Wenn nicht, wird geprueft, 
41  * ob eine Bilddatei mit Dateiname ohne Namenszusatz existiert. Wenn ja, wird 
42  * aus dieser Datei die gewuenschte Fassung erzeugt.
43  * 
44  * Beispiel:
45  * Fuer die Anfrage nach /daten/mein-bild_tn.png wird aus der Datei
46  * /daten/mein-bild.png eine verkleinerte Fassung der Groesse 120 Bildpunkte 
47  * entlang der laengsten Kante erzeugt, als /daten/mein-bild_tn.png gespeichert 
48  * und ausgeliefert.
49  * 
50  * Der Filter benoetigt das Attribut
51  * FileHandler.ATTR_FILE_BASE 
52  * im HttpContext
53  * 
54  * @author Ulrich Hilger
55  * @version 1, 30.06.2021
56  */
57 public class ImageFilter extends Filter {
58
59   public static final String DESCRIPTION = "ImageFilter";
60   
61   @Override
62   public void doFilter(HttpExchange exchange, Chain chain) throws IOException {
63     String uriStr = exchange.getRequestURI().toString();
64     //String fName = new HttpHelper().getFileName(exchange);
65     String fName = exchange
66             .getRequestURI()
67             .getPath()
68             .substring(exchange
69                     .getHttpContext()
70                     .getPath()
71                     .length());          
72     ImageWorker worker = new ImageWorker();
73     worker.createImages(exchange.getHttpContext().getAttributes().get(FileServer.ATTR_FILE_BASE).toString(), 
74             fName, uriStr);
75     chain.doFilter(exchange);
76   }
77
78   @Override
79   public String description() {
80     return DESCRIPTION;
81   }
82   
83 }