Mercurial > hg > digilib-old
comparison servlet/src/digilib/image/ImageLoaderDocuImage.java @ 220:c4ee5f0c3a77
servlet version 1.18b12
- small fix in DocuDirectory.get
author | robcast |
---|---|
date | Tue, 29 Jun 2004 12:16:50 +0200 |
parents | 1a65d8e43620 |
children | 7ff9b9b0c16a |
comparison
equal
deleted
inserted
replaced
219:e6183215c9d9 | 220:c4ee5f0c3a77 |
---|---|
35 import java.util.Iterator; | 35 import java.util.Iterator; |
36 | 36 |
37 import javax.imageio.ImageIO; | 37 import javax.imageio.ImageIO; |
38 import javax.imageio.ImageReadParam; | 38 import javax.imageio.ImageReadParam; |
39 import javax.imageio.ImageReader; | 39 import javax.imageio.ImageReader; |
40 import javax.imageio.stream.FileImageInputStream; | |
40 import javax.imageio.stream.ImageInputStream; | 41 import javax.imageio.stream.ImageInputStream; |
41 | 42 |
42 import digilib.io.FileOpException; | 43 import digilib.io.FileOpException; |
43 import digilib.io.ImageFile; | 44 import digilib.io.ImageFile; |
44 | 45 |
123 // clean up old reader | 124 // clean up old reader |
124 dispose(); | 125 dispose(); |
125 } | 126 } |
126 //System.gc(); | 127 //System.gc(); |
127 RandomAccessFile rf = new RandomAccessFile(f.getFile(), "r"); | 128 RandomAccessFile rf = new RandomAccessFile(f.getFile(), "r"); |
128 ImageInputStream istream = ImageIO.createImageInputStream(rf); | 129 ImageInputStream istream = new FileImageInputStream(rf); |
129 //Iterator readers = ImageIO.getImageReaders(istream); | 130 Iterator readers = ImageIO.getImageReaders(istream); |
130 //String ext = f.getName().substring(f.getName().lastIndexOf('.')+1); | 131 //String ext = f.getName().substring(f.getName().lastIndexOf('.')+1); |
131 //Iterator readers = ImageIO.getImageReadersBySuffix(ext); | 132 //Iterator readers = ImageIO.getImageReadersBySuffix(ext); |
132 Iterator readers = ImageIO.getImageReadersByMIMEType(f.getMimetype()); | 133 //Iterator readers = ImageIO.getImageReadersByMIMEType(f.getMimetype()); |
133 reader = (ImageReader) readers.next(); | 134 reader = (ImageReader) readers.next(); |
134 /* are there more readers? */ | 135 /* are there more readers? */ |
135 logger.debug("ImageIO: this reader: " + reader.getClass()); | 136 logger.debug("ImageIO: this reader: " + reader.getClass()); |
136 while (readers.hasNext()) { | 137 while (readers.hasNext()) { |
137 logger.debug("ImageIO: next reader: " + readers.next().getClass()); | 138 logger.debug("ImageIO: next reader: " + readers.next().getClass()); |
154 preloadImage(f); | 155 preloadImage(f); |
155 } | 156 } |
156 // set up reader parameters | 157 // set up reader parameters |
157 ImageReadParam readParam = reader.getDefaultReadParam(); | 158 ImageReadParam readParam = reader.getDefaultReadParam(); |
158 readParam.setSourceRegion(region); | 159 readParam.setSourceRegion(region); |
159 readParam.setSourceSubsampling(prescale, prescale, 0, 0); | 160 if (prescale > 1) { |
161 readParam.setSourceSubsampling(prescale, prescale, 0, 0); | |
162 } | |
160 // read image | 163 // read image |
161 logger.debug("loading.."); | 164 logger.debug("loading.."); |
162 img = reader.read(0, readParam); | 165 img = reader.read(0, readParam); |
163 logger.debug("loaded"); | 166 logger.debug("loaded"); |
164 } catch (IOException e) { | 167 } catch (IOException e) { |
226 new AffineTransformOp( | 229 new AffineTransformOp( |
227 AffineTransform.getScaleInstance(scale, scale), | 230 AffineTransform.getScaleInstance(scale, scale), |
228 renderHint); | 231 renderHint); |
229 BufferedImage scaledImg = null; | 232 BufferedImage scaledImg = null; |
230 // enforce destination image type (*Java2D BUG*) | 233 // enforce destination image type (*Java2D BUG*) |
231 if (quality > 0) { | 234 int type = img.getType(); |
235 // FIXME: which type would be best? | |
236 if ((quality > 0)&&(type != 0)) { | |
232 logger.debug("creating destination image"); | 237 logger.debug("creating destination image"); |
233 Rectangle2D dstBounds = scaleOp.getBounds2D(img); | 238 Rectangle2D dstBounds = scaleOp.getBounds2D(img); |
234 scaledImg = | 239 scaledImg = |
235 new BufferedImage( | 240 new BufferedImage( |
236 (int) dstBounds.getWidth(), | 241 (int) dstBounds.getWidth(), |
237 (int) dstBounds.getHeight(), | 242 (int) dstBounds.getHeight(), |
238 img.getType()); | 243 type); |
239 } | 244 } |
240 logger.debug("scaling..."); | 245 logger.debug("scaling..."); |
241 scaledImg = scaleOp.filter(img, scaledImg); | 246 scaledImg = scaleOp.filter(img, scaledImg); |
242 logger.debug("destination image type "+scaledImg.getType()); | 247 logger.debug("destination image type "+scaledImg.getType()); |
243 if (scaledImg == null) { | 248 if (scaledImg == null) { |
257 public void blur(int radius) throws ImageOpException { | 262 public void blur(int radius) throws ImageOpException { |
258 //DEBUG | 263 //DEBUG |
259 logger.debug("blur: " + radius); | 264 logger.debug("blur: " + radius); |
260 // minimum radius is 2 | 265 // minimum radius is 2 |
261 int klen = Math.max(radius, 2); | 266 int klen = Math.max(radius, 2); |
267 // FIXME: use constant kernels for most common sizes | |
262 int ksize = klen * klen; | 268 int ksize = klen * klen; |
263 // kernel is constant 1/k | 269 // kernel is constant 1/k |
264 float f = 1f / ksize; | 270 float f = 1f / ksize; |
265 float[] kern = new float[ksize]; | 271 float[] kern = new float[ksize]; |
266 for (int i = 0; i < ksize; i++) { | 272 for (int i = 0; i < ksize; i++) { |