annotate servlet/src/digilib/servlet/Scaler.java @ 86:997ba69afb81

New version 1.8b1. With directory and file information cache. With enhanceRGB method for color correction.
author robcast
date Sun, 09 Mar 2003 21:37:27 +0100
parents 4e6757e8ccd4
children d9bfec4f046e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
1 /* Scaler -- Scaler servlet main class
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
2
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
3 Digital Image Library servlet components
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
4
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
5 Copyright (C) 2001, 2002, 2003 Robert Casties (robcast@mail.berlios.de)
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
6
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
7 This program is free software; you can redistribute it and/or modify it
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
9 Free Software Foundation; either version 2 of the License, or (at your
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
10 option) any later version.
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
11
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
12 Please read license.txt for the full details. A copy of the GPL
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
13 may be found at http://www.gnu.org/copyleft/lgpl.html
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
14
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
15 You should have received a copy of the GNU General Public License
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
16 along with this program; if not, write to the Free Software
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
18
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
19 */
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
20
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
21 package digilib.servlet;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
22
86
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
23 import java.awt.Dimension;
79
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
24 import java.awt.geom.AffineTransform;
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
25 import java.awt.geom.Point2D;
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
26 import java.awt.geom.Rectangle2D;
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
27 import java.io.File;
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
28 import java.io.IOException;
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
29 import java.util.List;
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
30
79
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
31 import javax.servlet.ServletConfig;
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
32 import javax.servlet.ServletContext;
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
33 import javax.servlet.ServletException;
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
34 import javax.servlet.http.HttpServlet;
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
35 import javax.servlet.http.HttpServletRequest;
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
36 import javax.servlet.http.HttpServletResponse;
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
37
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
38 import digilib.Utils;
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
39 import digilib.auth.AuthOpException;
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
40 import digilib.auth.AuthOps;
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
41 import digilib.image.DocuImage;
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
42 import digilib.image.ImageOpException;
86
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
43 import digilib.io.DocuDirCache;
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
44 import digilib.io.DocuFile;
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
45 import digilib.io.DocuFileset;
79
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
46 import digilib.io.FileOpException;
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
47 import digilib.io.FileOps;
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
48
64
5ea1999befd4 New JAI ImageLoader plugin. Currently uses first beta version of the plugin.
robcast
parents: 62
diff changeset
49 //import tilecachetool.*;
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
50
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
51 /**
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
52 * @author casties
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
53 *
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
54 */
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
55 //public class Scaler extends HttpServlet implements SingleThreadModel {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
56 public class Scaler extends HttpServlet {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
57
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
58 // digilib servlet version (for all components)
86
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
59 public static final String dlVersion = "1.8b1";
79
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
60
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
61 // Utils instance with debuglevel
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
62 Utils util;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
63 // FileOps instance
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
64 FileOps fileOp;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
65 // AuthOps instance
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
66 AuthOps authOp;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
67 // ServletOps instance
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
68 ServletOps servletOp;
86
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
69 // DocuDirCache instance
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
70 DocuDirCache dirCache;
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
71
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
72 // DigilibParameters instance
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
73 DigilibConfiguration dlConfig;
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
74
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
75 // use authorization database
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
76 boolean useAuthentication = true;
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
77
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
78 /** Initialisation on first run.
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
79 *
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
80 * @see javax.servlet.Servlet#init(javax.servlet.ServletConfig)
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
81 */
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
82 public void init(ServletConfig config) throws ServletException {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
83 super.init(config);
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
84
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
85 // Debuggin!
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
86 //TCTool tctool = new TCTool();
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
87
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
88 // get our ServletContext
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
89 ServletContext context = config.getServletContext();
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
90 // see if there is a Configuration instance
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
91 dlConfig =
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
92 (DigilibConfiguration) context.getAttribute(
86
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
93 "digilib.servlet.configuration");
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
94 if (dlConfig == null) {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
95 // create new Configuration
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
96 try {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
97 dlConfig = new DigilibConfiguration(config);
86
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
98 context.setAttribute("digilib.servlet.configuration", dlConfig);
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
99 } catch (Exception e) {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
100 throw new ServletException(e);
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
101 }
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
102 }
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
103 // set the servlet version
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
104 dlConfig.setServletVersion(dlVersion);
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
105 // first we need an Utils
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
106 util = dlConfig.getUtil();
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
107 // set our AuthOps
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
108 useAuthentication = dlConfig.isUseAuthentication();
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
109 authOp = dlConfig.getAuthOp();
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
110 // FileOps instance
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
111 fileOp = new FileOps(util);
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
112 // AuthOps instance
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
113 servletOp = new ServletOps(util);
86
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
114 // DocuDirCache instance
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
115 dirCache = dlConfig.getDirCache();
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
116 }
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
117
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
118 /** Process the HTTP Get request*/
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
119 public void doGet(HttpServletRequest request, HttpServletResponse response)
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
120 throws ServletException, IOException {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
121 util.dprintln(1, "The servlet has received a GET!");
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
122 // create new request with defaults
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
123 DigilibRequest dlReq = new DigilibRequest();
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
124 // set with request parameters
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
125 dlReq.setWithRequest(request);
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
126 // add DigilibRequest to ServletRequest
79
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
127 request.setAttribute("digilib.servlet.request", dlReq);
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
128 // do the processing
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
129 processRequest(request, response);
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
130 }
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
131
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
132 /**Process the HTTP Post request*/
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
133 public void doPost(
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
134 HttpServletRequest request,
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
135 HttpServletResponse response)
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
136 throws ServletException, IOException {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
137 util.dprintln(1, "The servlet has received a POST!");
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
138 // create new request with defaults
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
139 DigilibRequest dlReq = new DigilibRequest();
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
140 // set with request parameters
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
141 dlReq.setWithRequest(request);
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
142 // add DigilibRequest to ServletRequest
79
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
143 request.setAttribute("digilib.servlet.request", dlReq);
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
144 // do the processing
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
145 processRequest(request, response);
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
146 }
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
147
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
148 /** main request handler. */
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
149 void processRequest(
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
150 HttpServletRequest request,
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
151 HttpServletResponse response)
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
152 throws ServletException, IOException {
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
153
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
154 // time for benchmarking
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
155 long startTime = System.currentTimeMillis();
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
156 // output mime/type
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
157 String mimeType = "image/png";
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
158
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
159 /*
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
160 * parameters for a session
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
161 */
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
162
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
163 // scale the image file to fit window size i.e. respect dw,dh
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
164 boolean scaleToFit = true;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
165 // crop the image if needed
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
166 boolean cropToFit = true;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
167 // use heuristics (GIF?) to scale or send as is
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
168 boolean autoScale = true;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
169 // try prescaled images first
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
170 boolean preScaledFirst = true;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
171 // interpolation to use for scaling
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
172 int scaleQual = 0;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
173 // send html error message (or image file)
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
174 boolean errorMsgHtml = false;
79
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
175 // mirror the image
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
176 boolean doMirror = false;
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
177 // angle of mirror axis
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
178 double mirrorAngle = 0;
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
179
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
180 /*
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
181 * request parameters
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
182 */
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
183
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
184 DigilibRequest dlRequest =
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
185 (DigilibRequest) request.getAttribute("digilib.servlet.request");
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
186
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
187 // destination image width
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
188 int paramDW = dlRequest.getDw();
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
189 // destination image height
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
190 int paramDH = dlRequest.getDh();
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
191 // relative area x_offset (0..1)
79
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
192 double paramWX = dlRequest.getWx();
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
193 // relative area y_offset
79
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
194 double paramWY = dlRequest.getWy();
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
195 // relative area width (0..1)
79
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
196 double paramWW = dlRequest.getWw();
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
197 // relative area height
79
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
198 double paramWH = dlRequest.getWh();
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
199 // scale factor (additional to dw/width, dh/height)
79
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
200 double paramWS = dlRequest.getWs();
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
201 // rotation angle
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
202 double paramROT = dlRequest.getRot();
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
203 // contrast enhancement
86
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
204 float paramCONT = dlRequest.getCont();
79
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
205 // brightness enhancement
86
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
206 float paramBRGT = dlRequest.getBrgt();
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
207 // color modification
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
208 float[] paramRGBM = dlRequest.getRgbm();
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
209 float[] paramRGBA = dlRequest.getRgba();
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
210
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
211 /* operation mode: "fit": always fit to page,
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
212 * "clip": send original resolution cropped, "file": send whole file (if
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
213 * allowed)
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
214 */
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
215 if (dlRequest.isOption("clip")) {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
216 scaleToFit = false;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
217 cropToFit = true;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
218 autoScale = false;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
219 } else if (dlRequest.isOption("fit")) {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
220 scaleToFit = true;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
221 cropToFit = true;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
222 autoScale = false;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
223 } else if (dlRequest.isOption("file")) {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
224 scaleToFit = false;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
225 if (dlConfig.isSendFileAllowed()) {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
226 cropToFit = false;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
227 } else {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
228 cropToFit = true;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
229 }
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
230 autoScale = false;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
231 }
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
232 // operation mode: "errtxt": error message in html, "errimg": error image
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
233 if (dlRequest.isOption("errtxt")) {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
234 errorMsgHtml = true;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
235 } else if (dlRequest.isOption("errimg")) {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
236 errorMsgHtml = false;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
237 }
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
238 // operation mode: "q0" - "q2": interpolation quality
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
239 if (dlRequest.isOption("q0")) {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
240 scaleQual = 0;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
241 } else if (dlRequest.isOption("q1")) {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
242 scaleQual = 1;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
243 } else if (dlRequest.isOption("q2")) {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
244 scaleQual = 2;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
245 }
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
246 // operation mode: "lores": try to use scaled image, "hires": use unscaled image
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
247 if (dlRequest.isOption("lores")) {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
248 preScaledFirst = true;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
249 } else if (dlRequest.isOption("hires")) {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
250 preScaledFirst = false;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
251 }
79
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
252 // operation mode: "hmir": mirror horizontally, "vmir": mirror vertically
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
253 if (dlRequest.isOption("hmir")) {
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
254 doMirror = true;
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
255 mirrorAngle = 0;
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
256 } else if (dlRequest.isOption("vmir")) {
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
257 doMirror = true;
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
258 mirrorAngle = 90;
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
259 }
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
260
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
261 //"big" try for all file/image actions
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
262 try {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
263
86
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
264 // new DocuImage instance
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
265 DocuImage docuImage = dlConfig.getDocuImageInstance();
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
266 if (docuImage == null) {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
267 throw new ImageOpException("Unable to load DocuImage class!");
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
268 }
79
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
269
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
270 // set interpolation quality
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
271 docuImage.setQuality(scaleQual);
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
272
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
273 /*
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
274 * find the file to load/send
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
275 */
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
276
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
277 // get PathInfo
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
278 String loadPathName = dlRequest.getFilePath();
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
279 // if it's zoomed, try hires version (to be optimized...)
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
280 if ((paramWW < 1f) || (paramWH < 1f)) {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
281 preScaledFirst = false;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
282 }
79
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
283
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
284 /*
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
285 * check permissions
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
286 */
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
287 if (useAuthentication) {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
288 // get a list of required roles (empty if no restrictions)
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
289 List rolesRequired = authOp.rolesForPath(loadPathName, request);
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
290 if (rolesRequired != null) {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
291 util.dprintln(1, "Role required: " + rolesRequired);
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
292 util.dprintln(2, "User: " + request.getRemoteUser());
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
293 // is the current request/user authorized?
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
294 if (!authOp.isRoleAuthorized(rolesRequired, request)) {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
295 // send deny answer and abort
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
296 util.dprintln(1, "ERROR: access denied!");
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
297 if (errorMsgHtml) {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
298 ServletOps.htmlMessage(
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
299 "ERROR: Unauthorized access!",
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
300 response);
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
301 } else {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
302 servletOp.sendFile(
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
303 new File(dlConfig.getDenyImgFileName()),
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
304 response);
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
305 }
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
306 return;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
307 }
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
308 }
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
309 }
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
310
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
311 // find the file
86
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
312 DocuFile fileToLoad;
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
313 DocuFileset fileset = dirCache.getFileset(loadPathName, dlRequest.getPn());
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
314 // simplistic selection of resolution
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
315 if (preScaledFirst) {
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
316 fileToLoad = (DocuFile)fileset.lastElement();
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
317 } else {
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
318 fileToLoad = (DocuFile)fileset.firstElement();
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
319 }
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
320 util.dprintln(1, "Loading: " + fileToLoad.getFile());
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
321
86
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
322 // check the source image
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
323 docuImage.checkFile(fileToLoad);
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
324 // get the source image type
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
325 mimeType = fileToLoad.getMimetype();
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
326
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
327 /* if autoScale and not zoomed and source is GIF/PNG
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
328 * then send as is.
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
329 */
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
330 if ((autoScale
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
331 && (mimeType == "image/gif" || mimeType == "image/png")
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
332 && (paramWW == 1f)
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
333 && (paramWH == 1f))
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
334 || (autoScale && !(scaleToFit || cropToFit))) {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
335
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
336 util.dprintln(1, "Sending File as is.");
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
337
86
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
338 servletOp.sendFile(fileToLoad.getFile(), response);
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
339
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
340 util.dprintln(
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
341 1,
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
342 "Done in "
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
343 + (System.currentTimeMillis() - startTime)
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
344 + "ms");
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
345 return;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
346 }
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
347
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
348 /*
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
349 * crop and scale the image
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
350 */
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
351
86
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
352 int imgWidth = 0;
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
353 int imgHeight = 0;
79
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
354 // get image size
86
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
355 if (fileToLoad.getSize() == null) {
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
356 // size unknown so far
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
357 imgWidth = docuImage.getWidth();
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
358 imgHeight = docuImage.getHeight();
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
359 // remember size
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
360 fileToLoad.setSize(new Dimension(imgWidth, imgHeight));
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
361 } else {
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
362 imgWidth = fileToLoad.getSize().width;
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
363 imgHeight = fileToLoad.getSize().height;
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
364 }
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
365
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
366 util.dprintln(2, "IMG: " + imgWidth + "x" + imgHeight);
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
367 util.dprintln(
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
368 2,
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
369 "time " + (System.currentTimeMillis() - startTime) + "ms");
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
370
79
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
371 // coordinates using Java2D
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
372 // image size
85
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
373 Rectangle2D imgBounds =
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
374 new Rectangle2D.Double(0, 0, imgWidth, imgHeight);
79
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
375 // user window area in 4-point form (ul, ur, ll, lr)
85
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
376 Point2D[] userAreaC =
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
377 {
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
378 new Point2D.Double(paramWX, paramWY),
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
379 new Point2D.Double(paramWX + paramWW, paramWY),
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
380 new Point2D.Double(paramWX, paramWY + paramWH),
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
381 new Point2D.Double(paramWX + paramWW, paramWY + paramWH)};
79
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
382 // transformation from relative [0,1] to image coordinates.
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
383 AffineTransform imgTrafo = new AffineTransform();
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
384 imgTrafo.scale(imgWidth, imgHeight);
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
385 // rotate coordinates
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
386 //imgTrafo.rotate(Math.toRadians(-paramROT));
85
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
387
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
388 // coordinates and scaling
79
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
389 double areaXoff;
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
390 double areaYoff;
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
391 double areaWidth;
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
392 double areaHeight;
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
393 double scaleX;
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
394 double scaleY;
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
395 double scaleXY;
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
396
85
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
397 /* if (scaleToFit) {
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
398 // calculate absolute from relative coordinates
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
399 areaXoff = paramWX * imgWidth;
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
400 areaYoff = paramWY * imgHeight;
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
401 areaWidth = paramWW * imgWidth;
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
402 areaHeight = paramWH * imgHeight;
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
403 // calculate scaling factors
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
404 scaleX = paramDW / areaWidth * paramWS;
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
405 scaleY = paramDH / areaHeight * paramWS;
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
406 scaleXY = (scaleX > scaleY) ? scaleY : scaleX;
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
407 } else {
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
408 // crop to fit
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
409 // calculate absolute from relative coordinates
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
410 areaXoff = paramWX * imgWidth;
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
411 areaYoff = paramWY * imgHeight;
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
412 areaWidth = paramDW;
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
413 areaHeight = paramDH;
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
414 // calculate scaling factors
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
415 scaleX = 1f;
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
416 scaleY = 1f;
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
417 scaleXY = 1f;
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
418 }
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
419
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
420 util.dprintln(
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
421 1,
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
422 "Scale "
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
423 + scaleXY
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
424 + "("
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
425 + scaleX
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
426 + ","
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
427 + scaleY
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
428 + ") on "
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
429 + areaXoff
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
430 + ","
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
431 + areaYoff
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
432 + " "
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
433 + areaWidth
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
434 + "x"
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
435 + areaHeight);
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
436 */
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
437 // Java2D
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
438 // area in image pixel coordinates
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
439 Point2D[] imgAreaC = { null, null, null, null };
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
440 // transform user coordinate area to image coordinate area
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
441 imgTrafo.transform(userAreaC, 0, imgAreaC, 0, 4);
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
442 areaXoff = imgAreaC[0].getX();
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
443 areaYoff = imgAreaC[0].getY();
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
444 // calculate scaling factors
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
445 if (scaleToFit) {
85
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
446 areaWidth = imgAreaC[0].distance(imgAreaC[1]);
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
447 areaHeight = imgAreaC[0].distance(imgAreaC[2]);
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
448 scaleX = paramDW / areaWidth * paramWS;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
449 scaleY = paramDH / areaHeight * paramWS;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
450 scaleXY = (scaleX > scaleY) ? scaleY : scaleX;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
451 } else {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
452 // crop to fit
85
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
453 areaWidth = paramDW * paramWS;
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
454 areaHeight = paramDH * paramWS;
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
455 scaleX = 1f;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
456 scaleY = 1f;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
457 scaleXY = 1f;
85
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
458
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
459 }
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
460
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
461 util.dprintln(
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
462 1,
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
463 "Scale "
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
464 + scaleXY
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
465 + "("
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
466 + scaleX
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
467 + ","
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
468 + scaleY
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
469 + ") on "
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
470 + areaXoff
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
471 + ","
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
472 + areaYoff
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
473 + " "
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
474 + areaWidth
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
475 + "x"
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
476 + areaHeight);
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
477
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
478 // clip area at the image border
79
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
479 /* areaWidth =
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
480 (areaXoff + areaWidth > imgWidth)
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
481 ? imgWidth - areaXoff
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
482 : areaWidth;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
483 areaHeight =
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
484 (areaYoff + areaHeight > imgHeight)
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
485 ? imgHeight - areaYoff
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
486 : areaHeight;
79
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
487 */
85
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
488
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
489 // create new rectangle from coordinates
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
490 Rectangle2D imgArea =
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
491 new Rectangle2D.Double(
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
492 areaXoff,
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
493 areaYoff,
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
494 areaWidth,
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
495 areaHeight);
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
496 // clip area at the image border
79
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
497 imgArea = imgArea.createIntersection(imgBounds);
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
498 areaWidth = imgArea.getWidth();
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
499 areaHeight = imgArea.getHeight();
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
500
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
501 util.dprintln(
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
502 2,
85
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
503 "crop: "
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
504 + areaXoff
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
505 + ","
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
506 + areaYoff
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
507 + " "
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
508 + areaWidth
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
509 + "x"
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
510 + areaHeight);
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
511
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
512 // check image parameters sanity
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
513 if ((areaWidth < 1)
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
514 || (areaHeight < 1)
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
515 || (scaleXY * areaWidth < 2)
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
516 || (scaleXY * areaHeight < 2)) {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
517 util.dprintln(1, "ERROR: invalid scale parameter set!");
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
518 throw new ImageOpException("Invalid scale parameter set!");
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
519 }
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
520
85
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
521 /*
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
522 * crop and scale image
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
523 */
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
524
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
525 // use subimage loading if possible
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
526 if (docuImage.isSubimageSupported()) {
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
527 System.out.println(
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
528 "Subimage: scale " + scaleXY + " = " + (1 / scaleXY));
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
529 double subf = 1d;
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
530 double subsamp = 1d;
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
531 if (scaleXY < 1) {
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
532 subf = 1 / scaleXY;
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
533 subsamp = Math.floor(subf);
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
534 scaleXY = subsamp / subf;
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
535 System.out.println(
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
536 "Using subsampling: " + subsamp + " rest " + scaleXY);
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
537 }
79
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
538
85
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
539 docuImage.loadSubimage(
86
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
540 fileToLoad.getFile(),
85
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
541 imgArea.getBounds(),
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
542 (int) subsamp);
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
543
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
544 System.out.println(
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
545 "SUBSAMP: "
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
546 + subsamp
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
547 + " -> "
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
548 + docuImage.getWidth()
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
549 + "x"
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
550 + docuImage.getHeight());
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
551
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
552 docuImage.scale(scaleXY);
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
553
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
554 } else {
86
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
555 // else load the whole file
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
556 docuImage.loadImage(fileToLoad.getFile());
85
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
557 docuImage.crop(
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
558 (int) areaXoff,
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
559 (int) areaYoff,
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
560 (int) areaWidth,
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
561 (int) areaHeight);
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
562
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
563 docuImage.scale(scaleXY);
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
564 }
79
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
565
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
566 // mirror image
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
567 if (doMirror) {
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
568 docuImage.mirror(mirrorAngle);
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
569 }
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
570
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
571 // rotate image (first shot :-)
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
572 if (paramROT != 0) {
85
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
573 docuImage.rotate(
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
574 paramROT);
79
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
575 }
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
576
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
577 // contrast and brightness enhancement
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
578 if ((paramCONT != 0) || (paramBRGT != 0)) {
85
4e6757e8ccd4 New enhanced ImageLoader stuff.
robcast
parents: 79
diff changeset
579 double mult = Math.pow(2, paramCONT);
86
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
580 docuImage.enhance((float)mult, (float)paramBRGT);
79
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
581 }
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
582
86
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
583 // color modification
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
584 if ((paramRGBM != null) || (paramRGBA != null)) {
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
585 // make shure we actually have two arrays
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
586 if (paramRGBM == null) {
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
587 paramRGBM = new float[3];
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
588 }
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
589 if (paramRGBA == null) {
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
590 paramRGBA = new float[3];
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
591 }
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
592 // calculate "contrast" values
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
593 float[] mult = new float[3];
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
594 for (int i = 0; i < 3; i++) {
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
595 mult[i] = (float)Math.pow(2, (double)paramRGBM[i]);
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
596 }
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
597 docuImage.enhanceRGB(mult, paramRGBA);
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
598 }
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
599
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
600 util.dprintln(
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
601 2,
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
602 "time " + (System.currentTimeMillis() - startTime) + "ms");
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
603
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
604 /*
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
605 * write the resulting image
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
606 */
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
607
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
608 // setup output -- if source is JPG then dest will be JPG else it's PNG
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
609 if (mimeType != "image/jpeg") {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
610 mimeType = "image/png";
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
611 }
79
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
612 response.setContentType(mimeType);
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
613
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
614 // write the image
79
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
615 docuImage.writeImage(mimeType, response.getOutputStream());
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
616
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
617 util.dprintln(
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
618 1,
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
619 "Done in " + (System.currentTimeMillis() - startTime) + "ms");
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
620
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
621 /*
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
622 * error handling
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
623 */
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
624
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
625 } // end of "big" try
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
626 catch (FileOpException e) {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
627 util.dprintln(1, "ERROR: File IO Error: " + e);
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
628 try {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
629 if (errorMsgHtml) {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
630 ServletOps.htmlMessage(
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
631 "ERROR: File IO Error: " + e,
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
632 response);
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
633 } else {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
634 servletOp.sendFile(
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
635 new File(dlConfig.getErrorImgFileName()),
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
636 response);
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
637 }
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
638 } catch (FileOpException ex) {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
639 } // so we don't get a loop
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
640 return;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
641 } catch (AuthOpException e) {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
642 util.dprintln(1, "ERROR: Authorization error: " + e);
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
643 try {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
644 if (errorMsgHtml) {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
645 ServletOps.htmlMessage(
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
646 "ERROR: Authorization error: " + e,
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
647 response);
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
648 } else {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
649 servletOp.sendFile(
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
650 new File(dlConfig.getErrorImgFileName()),
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
651 response);
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
652 }
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
653 } catch (FileOpException ex) {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
654 } // so we don't get a loop
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
655 return;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
656 } catch (ImageOpException e) {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
657 util.dprintln(1, "ERROR: Image Error: " + e);
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
658 try {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
659 if (errorMsgHtml) {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
660 ServletOps.htmlMessage(
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
661 "ERROR: Image Operation Error: " + e,
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
662 response);
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
663 } else {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
664 servletOp.sendFile(
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
665 new File(dlConfig.getErrorImgFileName()),
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
666 response);
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
667 }
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
668 } catch (FileOpException ex) {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
669 } // so we don't get a loop
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
670 return;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
671 } catch (RuntimeException e) {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
672 // JAI likes to throw RuntimeExceptions ;-(
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
673 util.dprintln(1, "ERROR: Other Image Error: " + e);
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
674 try {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
675 if (errorMsgHtml) {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
676 ServletOps.htmlMessage(
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
677 "ERROR: Other Image Operation Error: " + e,
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
678 response);
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
679 } else {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
680 servletOp.sendFile(
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
681 new File(dlConfig.getErrorImgFileName()),
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
682 response);
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
683 }
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
684 } catch (FileOpException ex) {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
685 } // so we don't get a loop
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
686 return;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
687 }
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
688 }
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
689
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 67
diff changeset
690 } //Scaler class