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++) {