Mercurial > hg > digilib-old
comparison servlet/src/digilib/image/ImageLoaderDocuImage.java @ 573:beeedf90cb81 stream
Merge from HEAD
fd2ef7e461198ef4a9d9a02459be2057038d600d
author | robcast |
---|---|
date | Wed, 22 Dec 2010 09:54:34 +0100 |
parents | 50f291d808b1 fd2ef7e46119 |
children | 790cbfb58b52 |
comparison
equal
deleted
inserted
replaced
568:34701340922e | 573:beeedf90cb81 |
---|---|
43 import javax.imageio.ImageWriteParam; | 43 import javax.imageio.ImageWriteParam; |
44 import javax.imageio.ImageWriter; | 44 import javax.imageio.ImageWriter; |
45 import javax.imageio.stream.FileImageInputStream; | 45 import javax.imageio.stream.FileImageInputStream; |
46 import javax.imageio.stream.ImageInputStream; | 46 import javax.imageio.stream.ImageInputStream; |
47 import javax.imageio.stream.ImageOutputStream; | 47 import javax.imageio.stream.ImageOutputStream; |
48 import javax.servlet.ServletException; | |
48 | 49 |
49 import digilib.io.FileOpException; | 50 import digilib.io.FileOpException; |
50 import digilib.io.FileOps; | 51 import digilib.io.FileOps; |
51 import digilib.io.ImageFile; | 52 import digilib.io.ImageFile; |
52 import digilib.io.ImageFileset; | 53 import digilib.io.ImageFileset; |
55 /** Implementation of DocuImage using the ImageLoader API of Java 1.4 and Java2D. */ | 56 /** Implementation of DocuImage using the ImageLoader API of Java 1.4 and Java2D. */ |
56 public class ImageLoaderDocuImage extends ImageInfoDocuImage { | 57 public class ImageLoaderDocuImage extends ImageInfoDocuImage { |
57 | 58 |
58 /** image object */ | 59 /** image object */ |
59 protected BufferedImage img; | 60 protected BufferedImage img; |
60 | 61 |
61 /** interpolation type */ | 62 /** interpolation type */ |
62 protected RenderingHints renderHint; | 63 protected RenderingHints renderHint; |
63 | 64 |
64 /** ImageIO image reader */ | 65 /** ImageIO image reader */ |
65 protected ImageReader reader; | 66 protected ImageReader reader; |
87 renderHint.put(RenderingHints.KEY_INTERPOLATION, | 88 renderHint.put(RenderingHints.KEY_INTERPOLATION, |
88 RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR); | 89 RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR); |
89 } | 90 } |
90 } | 91 } |
91 | 92 |
92 public int getHeight() { | 93 /* returns the size of the current image */ |
93 int h = 0; | 94 public ImageSize getSize() { |
94 try { | 95 ImageSize is = null; |
95 if (img == null) { | 96 // TODO: do we want to cache imageSize? |
96 h = reader.getHeight(0); | 97 int h = 0; |
97 } else { | 98 int w = 0; |
98 h = img.getHeight(); | 99 try { |
99 } | 100 if (img == null) { |
100 } catch (IOException e) { | 101 // get size from ImageReader |
101 logger.debug("error in getHeight", e); | 102 h = reader.getHeight(0); |
102 } | 103 w = reader.getWidth(0); |
103 return h; | 104 } else { |
104 } | 105 // get size from image |
105 | 106 h = img.getHeight(); |
106 public int getWidth() { | 107 w = img.getWidth(); |
107 int w = 0; | 108 } |
108 try { | 109 is = new ImageSize(w, h); |
109 if (img == null) { | 110 } catch (IOException e) { |
110 w = reader.getWidth(0); | 111 logger.debug("error in getSize:", e); |
111 } else { | 112 } |
112 w = img.getWidth(); | 113 return is; |
113 } | 114 } |
114 } catch (IOException e) { | |
115 logger.debug("error in getHeight", e); | |
116 } | |
117 return w; | |
118 } | |
119 | 115 |
120 /* returns a list of supported image formats */ | 116 /* returns a list of supported image formats */ |
121 public Iterator<String> getSupportedFormats() { | 117 public Iterator<String> getSupportedFormats() { |
122 String[] formats = ImageIO.getReaderFormatNames(); | 118 String[] formats = ImageIO.getReaderFormatNames(); |
123 return Arrays.asList(formats).iterator(); | 119 return Arrays.asList(formats).iterator(); |
228 } | 224 } |
229 } | 225 } |
230 | 226 |
231 /* write image of type mt to Stream */ | 227 /* write image of type mt to Stream */ |
232 public void writeImage(String mt, OutputStream ostream) | 228 public void writeImage(String mt, OutputStream ostream) |
233 throws FileOpException { | 229 throws ImageOpException, ServletException { |
234 logger.debug("writeImage"); | 230 logger.debug("writeImage"); |
235 // setup output | 231 // setup output |
236 ImageWriter writer = null; | 232 ImageWriter writer = null; |
237 ImageOutputStream imgout = null; | 233 ImageOutputStream imgout = null; |
238 try { | 234 try { |
254 img = img2; | 250 img = img2; |
255 } | 251 } |
256 writer = (ImageWriter) ImageIO.getImageWritersByFormatName( | 252 writer = (ImageWriter) ImageIO.getImageWritersByFormatName( |
257 "jpeg").next(); | 253 "jpeg").next(); |
258 if (writer == null) { | 254 if (writer == null) { |
259 throw new FileOpException("Unable to get JPEG writer"); | 255 throw new ImageOpException("Unable to get JPEG writer"); |
260 } | 256 } |
261 ImageWriteParam param = writer.getDefaultWriteParam(); | 257 ImageWriteParam param = writer.getDefaultWriteParam(); |
262 if (quality > 1) { | 258 if (quality > 1) { |
263 // change JPEG compression quality | 259 // change JPEG compression quality |
264 param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); | 260 param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); |
275 } else if (mt == "image/png") { | 271 } else if (mt == "image/png") { |
276 // render output | 272 // render output |
277 writer = (ImageWriter) ImageIO.getImageWritersByFormatName( | 273 writer = (ImageWriter) ImageIO.getImageWritersByFormatName( |
278 "png").next(); | 274 "png").next(); |
279 if (writer == null) { | 275 if (writer == null) { |
280 throw new FileOpException("Unable to get PNG writer"); | 276 throw new ImageOpException("Unable to get PNG writer"); |
281 } | 277 } |
282 writer.setOutput(imgout); | 278 writer.setOutput(imgout); |
283 logger.debug("writing"); | 279 logger.debug("writing"); |
284 writer.write(img); | 280 writer.write(img); |
285 } else { | 281 } else { |
286 // unknown mime type | 282 // unknown mime type |
287 throw new FileOpException("Unknown mime type: " + mt); | 283 throw new ImageOpException("Unknown mime type: " + mt); |
288 } | 284 } |
289 | 285 |
290 } catch (IOException e) { | 286 } catch (IOException e) { |
291 throw new FileOpException("Error writing image."); | 287 logger.error("Error writing image:", e); |
288 throw new ServletException("Error writing image:", e); | |
292 } finally { | 289 } finally { |
293 // clean up | 290 // clean up |
294 if (writer != null) { | 291 if (writer != null) { |
295 writer.dispose(); | 292 writer.dispose(); |
296 } | 293 } |