annotate servlet/src/digilib/image/ImageJobDescription.java @ 557:0885f5ca5b24 digilibPDF

more refactoring and rearranging pdf and image generation works now
author robcast
date Thu, 16 Dec 2010 21:19:11 +0100
parents servlet/src/digilib/servlet/ImageJobDescription.java@88ed97d08b97
children baaa5bab5e16
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
557
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 555
diff changeset
1 package digilib.image;
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
2
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
3 import java.awt.geom.AffineTransform;
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
4 import java.awt.geom.Rectangle2D;
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
5 import java.io.IOException;
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
6
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
7 import org.apache.log4j.Logger;
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
8
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
9 import digilib.io.DocuDirCache;
541
f140d5ee8c0b new NumRange class
robcast
parents: 531
diff changeset
10 import digilib.io.DocuDirectory;
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
11 import digilib.io.FileOpException;
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
12 import digilib.io.FileOps;
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
13 import digilib.io.ImageFile;
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
14 import digilib.io.ImageFileset;
557
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 555
diff changeset
15 import digilib.servlet.DigilibConfiguration;
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 555
diff changeset
16 import digilib.util.OptionsSet;
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 555
diff changeset
17 import digilib.util.Parameter;
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 555
diff changeset
18 import digilib.util.ParameterMap;
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
19
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
20
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
21 /**
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
22 * A container class for storing a set of instructional parameters
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
23 * used for content generating classes like MakePDF.
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
24 *
511
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
25 * This contains the functionality formerly found in Scaler, processRequest, only factorized.
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
26 *
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
27 * TODO clean up...
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
28 *
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
29 * @author cmielack, casties
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
30 *
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
31 */
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
32
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
33 public class ImageJobDescription extends ParameterMap {
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
34
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
35 DigilibConfiguration dlConfig = null;
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
36 protected static Logger logger = Logger.getLogger("digilib.servlet");
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
37
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
38 ImageFile fileToLoad = null;
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
39 ImageFileset fileset = null;
541
f140d5ee8c0b new NumRange class
robcast
parents: 531
diff changeset
40 DocuDirectory fileDir = null;
f140d5ee8c0b new NumRange class
robcast
parents: 531
diff changeset
41 String filePath = null;
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
42 ImageSize expectedSourceSize = null;
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
43 Float scaleXY = null;
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
44 Rectangle2D userImgArea = null;
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
45 Rectangle2D outerUserImgArea= null;
502
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 500
diff changeset
46 Boolean imageSendable = null;
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
47 String mimeType;
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
48 Integer paramDW;
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
49 Integer paramDH;
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
50
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
51 /** create empty ImageJobDescription.
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
52 * @param dlcfg
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
53 */
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
54 public ImageJobDescription(DigilibConfiguration dlcfg) {
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
55 super(30);
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
56 dlConfig = dlcfg;
552
785fc58b68b1 more cleanup and refactoring
robcast
parents: 547
diff changeset
57 }
785fc58b68b1 more cleanup and refactoring
robcast
parents: 547
diff changeset
58
785fc58b68b1 more cleanup and refactoring
robcast
parents: 547
diff changeset
59
785fc58b68b1 more cleanup and refactoring
robcast
parents: 547
diff changeset
60 /** set up Parameters
557
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 555
diff changeset
61 * @see digilib.util.ParameterMap#initParams()
552
785fc58b68b1 more cleanup and refactoring
robcast
parents: 547
diff changeset
62 */
785fc58b68b1 more cleanup and refactoring
robcast
parents: 547
diff changeset
63 @Override
785fc58b68b1 more cleanup and refactoring
robcast
parents: 547
diff changeset
64 protected void initParams() {
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
65 // url of the page/document (second part)
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
66 newParameter("fn", "", null, 's');
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
67 // page number
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
68 newParameter("pn", new Integer(1), null, 's');
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
69 // width of client in pixels
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
70 newParameter("dw", new Integer(0), null, 's');
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
71 // height of client in pixels
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
72 newParameter("dh", new Integer(0), null, 's');
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
73 // left edge of image (float from 0 to 1)
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
74 newParameter("wx", new Float(0), null, 's');
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
75 // top edge in image (float from 0 to 1)
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
76 newParameter("wy", new Float(0), null, 's');
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
77 // width of image (float from 0 to 1)
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
78 newParameter("ww", new Float(1), null, 's');
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
79 // height of image (float from 0 to 1)
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
80 newParameter("wh", new Float(1), null, 's');
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
81 // scale factor
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
82 newParameter("ws", new Float(1), null, 's');
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
83 // special options like 'fit' for gifs
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
84 newParameter("mo", this.options, null, 's');
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
85 // rotation angle (degree)
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
86 newParameter("rot", new Float(0), null, 's');
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
87 // contrast enhancement factor
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
88 newParameter("cont", new Float(0), null, 's');
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
89 // brightness enhancement factor
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
90 newParameter("brgt", new Float(0), null, 's');
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
91 // color multiplicative factors
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
92 newParameter("rgbm", "0/0/0", null, 's');
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
93 // color additive factors
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
94 newParameter("rgba", "0/0/0", null, 's');
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
95 // display dpi resolution (total)
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
96 newParameter("ddpi", new Float(0), null, 's');
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
97 // display dpi X resolution
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
98 newParameter("ddpix", new Float(0), null, 's');
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
99 // display dpi Y resolution
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
100 newParameter("ddpiy", new Float(0), null, 's');
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
101 // scale factor for mo=ascale
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
102 newParameter("scale", new Float(1), null, 's');
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
103 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
104
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 502
diff changeset
105
552
785fc58b68b1 more cleanup and refactoring
robcast
parents: 547
diff changeset
106 /* (non-Javadoc)
785fc58b68b1 more cleanup and refactoring
robcast
parents: 547
diff changeset
107 * @see digilib.servlet.ParameterMap#initOptions()
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
108 */
552
785fc58b68b1 more cleanup and refactoring
robcast
parents: 547
diff changeset
109 @Override
785fc58b68b1 more cleanup and refactoring
robcast
parents: 547
diff changeset
110 protected void initOptions() {
785fc58b68b1 more cleanup and refactoring
robcast
parents: 547
diff changeset
111 if (options == null) {
785fc58b68b1 more cleanup and refactoring
robcast
parents: 547
diff changeset
112 String s = this.getAsString("mo");
785fc58b68b1 more cleanup and refactoring
robcast
parents: 547
diff changeset
113 options = new OptionsSet(s);
785fc58b68b1 more cleanup and refactoring
robcast
parents: 547
diff changeset
114 }
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
115 }
552
785fc58b68b1 more cleanup and refactoring
robcast
parents: 547
diff changeset
116
785fc58b68b1 more cleanup and refactoring
robcast
parents: 547
diff changeset
117
785fc58b68b1 more cleanup and refactoring
robcast
parents: 547
diff changeset
118 /** Creates new ImageJobDescription by merging Parameters from another ParameterMap.
785fc58b68b1 more cleanup and refactoring
robcast
parents: 547
diff changeset
119 * @param pm
785fc58b68b1 more cleanup and refactoring
robcast
parents: 547
diff changeset
120 * @param dlcfg
785fc58b68b1 more cleanup and refactoring
robcast
parents: 547
diff changeset
121 * @return
785fc58b68b1 more cleanup and refactoring
robcast
parents: 547
diff changeset
122 */
557
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 555
diff changeset
123 public static ImageJobDescription getInstance(ParameterMap pm, DigilibConfiguration dlcfg) {
552
785fc58b68b1 more cleanup and refactoring
robcast
parents: 547
diff changeset
124 ImageJobDescription newMap = new ImageJobDescription(dlcfg);
785fc58b68b1 more cleanup and refactoring
robcast
parents: 547
diff changeset
125 // add all params to this map
557
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 555
diff changeset
126 newMap.params.putAll(pm.getParams());
552
785fc58b68b1 more cleanup and refactoring
robcast
parents: 547
diff changeset
127 newMap.initOptions();
785fc58b68b1 more cleanup and refactoring
robcast
parents: 547
diff changeset
128 return newMap;
785fc58b68b1 more cleanup and refactoring
robcast
parents: 547
diff changeset
129 }
785fc58b68b1 more cleanup and refactoring
robcast
parents: 547
diff changeset
130
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
131
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
132 public String getMimeType() throws IOException {
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
133 if (mimeType == null) {
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
134 fileToLoad = getFileToLoad();
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
135 if(! fileToLoad.isChecked()){
502
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 500
diff changeset
136 ImageOps.checkFile(fileToLoad);
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 500
diff changeset
137 }
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
138 mimeType = fileToLoad.getMimetype();
502
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 500
diff changeset
139 }
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
140 return mimeType;
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
141 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
142
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
143 public ImageFile getFileToLoad() throws IOException {
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
144
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
145 if(fileToLoad == null){
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
146 fileset = getFileset();
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
147
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
148 /* select a resolution */
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
149 if (getHiresOnly()) {
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
150 // get first element (= highest resolution)
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
151 fileToLoad = fileset.getBiggest();
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
152 } else if (getLoresOnly()) {
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
153 // enforced lores uses next smaller resolution
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
154 fileToLoad = fileset.getNextSmaller(getExpectedSourceSize());
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
155 if (fileToLoad == null) {
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
156 // this is the smallest we have
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
157 fileToLoad = fileset.getSmallest();
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
158 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
159 } else {
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
160 // autores: use next higher resolution
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
161 fileToLoad = fileset.getNextBigger(getExpectedSourceSize());
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
162 if (fileToLoad == null) {
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
163 // this is the highest we have
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
164 fileToLoad = fileset.getBiggest();
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
165 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
166 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
167 logger.info("Planning to load: " + fileToLoad.getFile());
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
168 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
169
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
170 return fileToLoad;
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
171
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
172 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
173
557
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 555
diff changeset
174 public DocuDirectory getFileDirectory() throws FileOpException {
555
88ed97d08b97 still refactoring
robcast
parents: 552
diff changeset
175 if(fileDir == null){
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
176 DocuDirCache dirCache = (DocuDirCache) dlConfig.getValue("servlet.dir.cache");
555
88ed97d08b97 still refactoring
robcast
parents: 552
diff changeset
177 String fp = getFilePath();
88ed97d08b97 still refactoring
robcast
parents: 552
diff changeset
178 fileDir = dirCache.getDirectory(fp);
541
f140d5ee8c0b new NumRange class
robcast
parents: 531
diff changeset
179 if (fileDir == null) {
f140d5ee8c0b new NumRange class
robcast
parents: 531
diff changeset
180 throw new FileOpException("Directory " + getFilePath() + " not found.");
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
181 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
182 }
541
f140d5ee8c0b new NumRange class
robcast
parents: 531
diff changeset
183 return fileDir;
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
184 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
185
557
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 555
diff changeset
186 public ImageFileset getFileset() throws FileOpException {
541
f140d5ee8c0b new NumRange class
robcast
parents: 531
diff changeset
187 if(fileset==null){
f140d5ee8c0b new NumRange class
robcast
parents: 531
diff changeset
188 DocuDirCache dirCache = (DocuDirCache) dlConfig.getValue("servlet.dir.cache");
f140d5ee8c0b new NumRange class
robcast
parents: 531
diff changeset
189
f140d5ee8c0b new NumRange class
robcast
parents: 531
diff changeset
190 fileset = (ImageFileset) dirCache.getFile(getFilePath(), getAsInt("pn"), FileOps.CLASS_IMAGE);
f140d5ee8c0b new NumRange class
robcast
parents: 531
diff changeset
191 if (fileset == null) {
f140d5ee8c0b new NumRange class
robcast
parents: 531
diff changeset
192 throw new FileOpException("File " + getFilePath() + "("
f140d5ee8c0b new NumRange class
robcast
parents: 531
diff changeset
193 + getAsInt("pn") + ") not found.");
f140d5ee8c0b new NumRange class
robcast
parents: 531
diff changeset
194 }
f140d5ee8c0b new NumRange class
robcast
parents: 531
diff changeset
195 }
f140d5ee8c0b new NumRange class
robcast
parents: 531
diff changeset
196 return fileset;
f140d5ee8c0b new NumRange class
robcast
parents: 531
diff changeset
197 }
f140d5ee8c0b new NumRange class
robcast
parents: 531
diff changeset
198
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
199 public String getFilePath() {
541
f140d5ee8c0b new NumRange class
robcast
parents: 531
diff changeset
200 if(filePath == null){
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
201 String s = this.getAsString("request.path");
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
202 s += this.getAsString("fn");
541
f140d5ee8c0b new NumRange class
robcast
parents: 531
diff changeset
203 filePath = FileOps.normalName(s);
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
204 }
541
f140d5ee8c0b new NumRange class
robcast
parents: 531
diff changeset
205 return filePath;
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
206 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
207
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
208 public boolean getHiresOnly(){
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
209 return hasOption("clip") || hasOption("hires");
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
210 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
211
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
212 public boolean getLoresOnly(){
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
213 return hasOption("lores");
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
214 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
215
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
216 public boolean getScaleToFit() {
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
217 return !(hasOption("clip") || hasOption("osize") || hasOption("ascale"));
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
218 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
219
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
220 public boolean getAbsoluteScale(){
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
221 return hasOption("osize") || hasOption("ascale");
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
222 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
223
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
224
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
225 public ImageSize getExpectedSourceSize() throws IOException {
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
226 if (expectedSourceSize == null){
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
227 expectedSourceSize = new ImageSize();
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
228 if (getScaleToFit()) {
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
229 // scale to fit -- calculate minimum source size
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
230 float scale = (1 / Math.min(getAsFloat("ww"), getAsFloat("wh"))) * getAsFloat("ws");
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
231 expectedSourceSize.setSize((int) (getDw() * scale),
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
232 (int) (getDh() * scale));
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
233 } else if (getAbsoluteScale() && hasOption("ascale")) {
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
234 // absolute scale -- apply scale to hires size
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
235 expectedSourceSize = getHiresSize().getScaled(getAsFloat("scale"));
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
236 } else {
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
237 // clip to fit -- source = destination size
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
238 expectedSourceSize.setSize((int) (getDw() * getAsFloat("ws")),
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
239 (int) (getDh() * getAsFloat("ws")));
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
240 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
241 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
242 return expectedSourceSize;
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
243 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
244
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
245 public ImageSize getHiresSize() throws IOException {
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
246 logger.debug("get_hiresSize()");
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
247
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
248 ImageSize hiresSize = null;
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
249 ImageFileset fileset = getFileset();
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
250 if (getAbsoluteScale()) {
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
251 ImageFile hiresFile = fileset.getBiggest();
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
252 if (!hiresFile.isChecked()) {
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
253 ImageOps.checkFile(hiresFile);
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
254 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
255 hiresSize = hiresFile.getSize();
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
256 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
257 return hiresSize;
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
258
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
259 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
260
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
261 /** Returns image scaling factor.
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
262 * Uses image size and user parameters.
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
263 * Modifies scaleXY, userImgArea.
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
264 * @return
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
265 * @throws IOException
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
266 * @throws ImageOpException
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
267 */
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
268 public float getScaleXY() throws IOException, ImageOpException {
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
269 //logger.debug("get_scaleXY()");
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
270 if(scaleXY == null){
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
271 // coordinates and scaling
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
272 float areaWidth;
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
273 float areaHeight;
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
274 float ws = getAsFloat("ws");
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
275 ImageSize imgSize = getFileToLoad().getSize();
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
276 // user window area in [0,1] coordinates
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
277 Rectangle2D relUserArea = new Rectangle2D.Float(getAsFloat("wx"), getAsFloat("wy"),
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
278 getAsFloat("ww"), getAsFloat("wh"));
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
279 // transform from relative [0,1] to image coordinates.
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
280 AffineTransform imgTrafo = AffineTransform.getScaleInstance(imgSize
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
281 .getWidth(), imgSize.getHeight());
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
282 // transform user coordinate area to image coordinate area
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
283 userImgArea = imgTrafo.createTransformedShape(
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
284 relUserArea).getBounds2D();
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
285
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
286 if (getScaleToFit()) {
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
287 // calculate scaling factors based on inner user area
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
288 areaWidth = (float) userImgArea.getWidth();
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
289 areaHeight = (float) userImgArea.getHeight();
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
290 float scaleX = getDw() / areaWidth * ws;
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
291 float scaleY = getDh() / areaHeight * ws;
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
292 scaleXY = (scaleX > scaleY) ? scaleY : scaleX;
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
293 } else if (getAbsoluteScale()) {
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
294 // absolute scaling factor
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
295 if (hasOption("osize")) {
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
296 // get original resolution from metadata
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
297 fileset.checkMeta();
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
298 float origResX = fileset.getResX();
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
299 float origResY = fileset.getResY();
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
300 if ((origResX == 0) || (origResY == 0)) {
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
301 throw new ImageOpException("Missing image DPI information!");
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
302 }
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
303 if ((getAsFloat("ddpix") == 0) || (getAsFloat("ddpiy") == 0)) {
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
304 throw new ImageOpException("Missing display DPI information!");
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
305 }
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
306 // calculate absolute scale factor
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
307 float sx = getAsFloat("ddpix") / origResX;
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
308 float sy = getAsFloat("ddpiy") / origResY;
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
309 // currently only same scale -- mean value
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
310 scaleXY = (sx + sy) / 2f;
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
311 } else {
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
312 scaleXY = getAsFloat("scale");
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
313 }
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
314 // we need to correct the factor if we use a pre-scaled image
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
315 ImageSize hiresSize = getHiresSize();
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
316 if (imgSize.getWidth() != hiresSize.getWidth()) {
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
317 scaleXY *= (float)hiresSize.getWidth() / (float)imgSize.getWidth();
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
318 }
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
319 areaWidth = getDw() / scaleXY * ws;
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
320 areaHeight = getDh() / scaleXY * ws;
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
321 // reset user area size
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
322 userImgArea.setRect(userImgArea.getX(), userImgArea.getY(),
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
323 areaWidth, areaHeight);
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
324 } else {
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
325 // crop to fit -- don't scale
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
326 areaWidth = getDw() * ws;
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
327 areaHeight = getDh() * ws;
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
328 // reset user area size
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
329 userImgArea.setRect(userImgArea.getX(), userImgArea.getY(),
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
330 areaWidth, areaHeight);
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
331 scaleXY = 1f;
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
332 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
333 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
334 return (float) scaleXY;
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
335 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
336
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
337 public int getDw() throws IOException {
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
338 logger.debug("get_paramDW()");
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
339 if (paramDW == null) {
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
340
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
341 paramDW = getAsInt("dw");
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
342 paramDH = getAsInt("dh");
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
343
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
344 float imgAspect = getFileToLoad().getAspect();
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
345 if (paramDW == 0) {
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
346 // calculate dw
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
347 paramDW = Math.round(paramDH * imgAspect);
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
348 setValue("dw", paramDW);
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
349 } else if (paramDH == 0) {
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
350 // calculate dh
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
351 paramDH = Math.round(paramDW / imgAspect);
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
352 setValue("dh", paramDH);
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
353 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
354 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
355 return paramDW;
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
356 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
357
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
358 public int getDh() throws IOException {
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
359 logger.debug("get_paramDH()");
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
360 if (paramDH == null) {
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
361
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
362 paramDW = getAsInt("dw");
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
363 paramDH = getAsInt("dh");
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
364
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
365 float imgAspect = getFileToLoad().getAspect();
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
366 if (paramDW == 0) {
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
367 // calculate dw
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
368 paramDW = Math.round(paramDH * imgAspect);
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
369 setValue("dw", paramDW);
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
370 } else if (paramDH == 0) {
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
371 // calculate dh
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
372 paramDH = Math.round(paramDW / imgAspect);
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
373 setValue("dh", paramDH);
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
374 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
375 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
376 return paramDH;
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
377 }
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
378
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
379 public Integer get_scaleQual(){
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
380 logger.debug("get_scaleQual()");
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
381 Integer qual = dlConfig.getAsInt("default-quality");
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
382 if(hasOption("q0"))
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
383 qual = 0;
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
384 else if(hasOption("q1"))
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
385 qual = 1;
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
386 else if(hasOption("q2"))
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
387 qual = 2;
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
388 return qual;
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
389 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
390
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
391
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
392 public Rectangle2D getUserImgArea() throws IOException, ImageOpException{
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
393 if(userImgArea == null) {
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
394 // getScaleXY sets userImgArea
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
395 getScaleXY();
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
396 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
397 return userImgArea;
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
398
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
399 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
400
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
401 public Rectangle2D getOuterUserImgArea() throws IOException, ImageOpException {
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
402 if(outerUserImgArea == null){
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
403 outerUserImgArea = getUserImgArea();
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
404
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
405 // image size in pixels
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
406 ImageSize imgSize = getFileToLoad().getSize();
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
407 Rectangle2D imgBounds = new Rectangle2D.Float(0, 0, imgSize.getWidth(),
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
408 imgSize.getHeight());
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
409
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
410 // clip area at the image border
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
411 outerUserImgArea = outerUserImgArea.createIntersection(imgBounds);
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
412
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
413 // check image parameters sanity
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
414 scaleXY = getScaleXY();
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
415 logger.debug("outerUserImgArea.getWidth()=" + outerUserImgArea.getWidth());
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
416 logger.debug("get_scaleXY() * outerUserImgArea.getWidth() = " + (scaleXY * outerUserImgArea.getWidth()));
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
417
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
418 if ((outerUserImgArea.getWidth() < 1)
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
419 || (outerUserImgArea.getHeight() < 1)
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
420 || (scaleXY * outerUserImgArea.getWidth() < 2)
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
421 || (scaleXY * outerUserImgArea.getHeight() < 2)) {
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
422 logger.error("ERROR: invalid scale parameter set!");
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
423 throw new ImageOpException("Invalid scale parameter set!");
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
424 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
425 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
426 return outerUserImgArea;
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
427 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
428
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
429
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
430 public int getForceType(){
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
431 if(hasOption("jpg"))
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
432 return ImageOps.TYPE_JPEG;
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
433 if(hasOption("png"))
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
434 return ImageOps.TYPE_PNG;
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
435
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
436 return ImageOps.TYPE_AUTO;
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
437 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
438
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
439 public float[] getRGBM(){
502
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 500
diff changeset
440 float[] paramRGBM = null;//{0f,0f,0f};
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
441 Parameter p = params.get("rgbm");
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
442 if (p.hasValue() && (!p.getAsString().equals("0/0/0"))) {
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
443 return p.parseAsFloatArray("/");
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
444 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
445 return paramRGBM;
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
446 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
447
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
448 public float[] getRGBA(){
502
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 500
diff changeset
449 float[] paramRGBA = null;//{0f,0f,0f};
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
450 Parameter p = params.get("rgba");
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
451 if (p.hasValue() && (!p.getAsString().equals("0/0/0"))) {
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
452 paramRGBA = p.parseAsFloatArray("/");
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
453 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
454 return paramRGBA;
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
455 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
456
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
457 /** Has send-as-file been requested?
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
458 * @return
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
459 */
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
460 public boolean getSendAsFile(){
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
461 return hasOption("file")
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
462 || hasOption("rawfile");
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
463 }
502
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 500
diff changeset
464
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
465 /** Could the image be sent without processing?
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
466 * Takes image type and additional image operations into account.
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
467 * Does not check requested size transformation.
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
468 * @return
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
469 * @throws IOException
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
470 */
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
471 public boolean isImageSendable() throws IOException {
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
472 // cached result?
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
473 if (imageSendable == null) {
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
474 String mimeType = getMimeType();
502
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 500
diff changeset
475 imageSendable = ( (mimeType.equals("image/jpeg")
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 500
diff changeset
476 || mimeType.equals("image/png")
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 500
diff changeset
477 || mimeType.equals("image/gif") )
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 500
diff changeset
478 &&
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
479 !(hasOption("hmir")
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
480 || hasOption("vmir")
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
481 || (getAsFloat("rot") != 0.0)
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
482 || (getRGBM() != null)
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
483 || (getRGBA() != null)
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
484 || (getAsFloat("cont") != 0.0)
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
485 || (getAsFloat("brgt") != 0.0)));
502
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 500
diff changeset
486 }
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 500
diff changeset
487
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 500
diff changeset
488 return imageSendable;
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 500
diff changeset
489 }
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 500
diff changeset
490
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 500
diff changeset
491
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
492 public boolean isTransformRequired() throws IOException {
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
493 ImageSize is = getFileToLoad().getSize();
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
494 ImageSize ess = getExpectedSourceSize();
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
495 // nt = no transform required
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
496 boolean nt = isImageSendable() && (
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
497 // lores: send if smaller
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
498 (getLoresOnly() && is.isSmallerThan(ess))
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
499 // else send if it fits
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
500 || (!(getLoresOnly() || getHiresOnly()) && is.fitsIn(ess)));
e1094c5ec032 more cleanup and refactoring
robcast
parents: 542
diff changeset
501 return ! nt;
502
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 500
diff changeset
502 }
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
503 }