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 }