annotate servlet/src/digilib/servlet/Scaler.java @ 103:0e49645f98c8

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