comparison servlet/src/digilib/image/ImageLoaderDocuImage.java @ 570:fd2ef7e46119

more cleanup, set version to 1.8.2
author robcast
date Tue, 21 Dec 2010 20:24:09 +0100
parents 8beefd1142b2
children beeedf90cb81
comparison
equal deleted inserted replaced
569:1f666c2b4578 570:fd2ef7e46119
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;
54 /** Implementation of DocuImage using the ImageLoader API of Java 1.4 and Java2D. */ 55 /** Implementation of DocuImage using the ImageLoader API of Java 1.4 and Java2D. */
55 public class ImageLoaderDocuImage extends ImageInfoDocuImage { 56 public class ImageLoaderDocuImage extends ImageInfoDocuImage {
56 57
57 /** image object */ 58 /** image object */
58 protected BufferedImage img; 59 protected BufferedImage img;
59 60
60 /** interpolation type */ 61 /** interpolation type */
61 protected RenderingHints renderHint; 62 protected RenderingHints renderHint;
62 63
63 /** ImageIO image reader */ 64 /** ImageIO image reader */
64 protected ImageReader reader; 65 protected ImageReader reader;
86 renderHint.put(RenderingHints.KEY_INTERPOLATION, 87 renderHint.put(RenderingHints.KEY_INTERPOLATION,
87 RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR); 88 RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR);
88 } 89 }
89 } 90 }
90 91
91 public int getHeight() { 92 /* returns the size of the current image */
92 int h = 0; 93 public ImageSize getSize() {
93 try { 94 ImageSize is = null;
94 if (img == null) { 95 // TODO: do we want to cache imageSize?
95 h = reader.getHeight(0); 96 int h = 0;
96 } else { 97 int w = 0;
97 h = img.getHeight(); 98 try {
98 } 99 if (img == null) {
99 } catch (IOException e) { 100 // get size from ImageReader
100 logger.debug("error in getHeight", e); 101 h = reader.getHeight(0);
101 } 102 w = reader.getWidth(0);
102 return h; 103 } else {
103 } 104 // get size from image
104 105 h = img.getHeight();
105 public int getWidth() { 106 w = img.getWidth();
106 int w = 0; 107 }
107 try { 108 is = new ImageSize(w, h);
108 if (img == null) { 109 } catch (IOException e) {
109 w = reader.getWidth(0); 110 logger.debug("error in getSize:", e);
110 } else { 111 }
111 w = img.getWidth(); 112 return is;
112 } 113 }
113 } catch (IOException e) {
114 logger.debug("error in getHeight", e);
115 }
116 return w;
117 }
118 114
119 /* returns a list of supported image formats */ 115 /* returns a list of supported image formats */
120 public Iterator<String> getSupportedFormats() { 116 public Iterator<String> getSupportedFormats() {
121 String[] formats = ImageIO.getReaderFormatNames(); 117 String[] formats = ImageIO.getReaderFormatNames();
122 return Arrays.asList(formats).iterator(); 118 return Arrays.asList(formats).iterator();
227 } 223 }
228 } 224 }
229 225
230 /* write image of type mt to Stream */ 226 /* write image of type mt to Stream */
231 public void writeImage(String mt, OutputStream ostream) 227 public void writeImage(String mt, OutputStream ostream)
232 throws FileOpException { 228 throws ImageOpException, ServletException {
233 logger.debug("writeImage"); 229 logger.debug("writeImage");
234 // setup output 230 // setup output
235 ImageWriter writer = null; 231 ImageWriter writer = null;
236 ImageOutputStream imgout = null; 232 ImageOutputStream imgout = null;
237 try { 233 try {
253 img = img2; 249 img = img2;
254 } 250 }
255 writer = (ImageWriter) ImageIO.getImageWritersByFormatName( 251 writer = (ImageWriter) ImageIO.getImageWritersByFormatName(
256 "jpeg").next(); 252 "jpeg").next();
257 if (writer == null) { 253 if (writer == null) {
258 throw new FileOpException("Unable to get JPEG writer"); 254 throw new ImageOpException("Unable to get JPEG writer");
259 } 255 }
260 ImageWriteParam param = writer.getDefaultWriteParam(); 256 ImageWriteParam param = writer.getDefaultWriteParam();
261 if (quality > 1) { 257 if (quality > 1) {
262 // change JPEG compression quality 258 // change JPEG compression quality
263 param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); 259 param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
274 } else if (mt == "image/png") { 270 } else if (mt == "image/png") {
275 // render output 271 // render output
276 writer = (ImageWriter) ImageIO.getImageWritersByFormatName( 272 writer = (ImageWriter) ImageIO.getImageWritersByFormatName(
277 "png").next(); 273 "png").next();
278 if (writer == null) { 274 if (writer == null) {
279 throw new FileOpException("Unable to get PNG writer"); 275 throw new ImageOpException("Unable to get PNG writer");
280 } 276 }
281 writer.setOutput(imgout); 277 writer.setOutput(imgout);
282 logger.debug("writing"); 278 logger.debug("writing");
283 writer.write(img); 279 writer.write(img);
284 } else { 280 } else {
285 // unknown mime type 281 // unknown mime type
286 throw new FileOpException("Unknown mime type: " + mt); 282 throw new ImageOpException("Unknown mime type: " + mt);
287 } 283 }
288 284
289 } catch (IOException e) { 285 } catch (IOException e) {
290 throw new FileOpException("Error writing image."); 286 logger.error("Error writing image:", e);
287 throw new ServletException("Error writing image:", e);
291 } finally { 288 } finally {
292 // clean up 289 // clean up
293 if (writer != null) { 290 if (writer != null) {
294 writer.dispose(); 291 writer.dispose();
295 } 292 }