Bilder mit Neon 2 verwenden
ulrich
2024-02-25 29fd9f03ed2179c5eddbfa7899768e8eae10ca3f
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 {
f7b9ad 63     /*
U 64       Regex fuer Bilder
65       .+\.jpg|.+\.jpeg|.+\.png
66       (Testen z.B. auf https://regexr.com/)
67     */
68     String pattern = (String) exchange.getHttpContext().getAttributes()
69             .getOrDefault("imageFilterPattern", ".+\\.jpg|.+\\.jpeg|.+\\.png");
ef2fb2 70     String uriStr = exchange.getRequestURI().toString();
29fd9f 71     if(uriStr.toLowerCase().matches(pattern)) {
f7b9ad 72       String fileBase = (String) exchange.getHttpContext().getAttributes()
U 73               .get(FileServer.ATTR_FILE_BASE);
74       String fileName = exchange
75               .getRequestURI()
76               .getPath()
77               .substring(exchange
78                       .getHttpContext()
79                       .getPath()
80                       .length());          
81       new ImageWorker().createImages(fileBase, fileName, uriStr);
82     }
ef2fb2 83     chain.doFilter(exchange);
U 84   }
85
86   @Override
87   public String description() {
88     return DESCRIPTION;
89   }
90   
91 }