comparison servlet/src/digilib/image/JIMIDocuImage.java @ 1:0ff3ede32060

Initial revision
author robcast
date Thu, 17 Jan 2002 15:25:46 +0100
parents
children 3b8797fc3e90
comparison
equal deleted inserted replaced
0:ffd2df307e81 1:0ff3ede32060
1 /* JAIDocuImage -- Image class implementation using JIMI toolkit
2
3 Digital Image Library servlet components
4
5 Copyright (C) 2001, 2002 Robert Casties (robcast@mail.berlios.de)
6
7 This program is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published by the
9 Free Software Foundation; either version 2 of the License, or (at your
10 option) any later version.
11
12 Please read license.txt for the full details. A copy of the GPL
13 may be found at http://www.gnu.org/copyleft/lgpl.html
14
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
19 */
20
21 package digilib.image;
22
23 import javax.servlet.*;
24 import javax.servlet.http.*;
25 import java.io.*;
26 import java.util.*;
27
28 import com.sun.jimi.core.*;
29 import com.sun.jimi.core.raster.*;
30 import com.sun.jimi.core.filters.*;
31
32 import java.awt.*;
33 import java.awt.image.*;
34
35 import digilib.*;
36 import digilib.io.*;
37
38
39 public class JIMIDocuImage extends DocuImageImpl {
40
41 private JimiRasterImage img;
42 private ImageProducer imgp;
43
44 public JIMIDocuImage() {
45 }
46
47 public JIMIDocuImage(Utils u) {
48 util = u;
49 }
50
51 /**
52 * load image file
53 */
54 public void loadImage(File f) throws FileOpException {
55 System.gc();
56 try {
57 img = Jimi.getRasterImage(f.toURL());
58 } catch (java.net.MalformedURLException e) {
59 util.dprintln(3, "ERROR(loadImage): MalformedURLException");
60 } catch (JimiException e) {
61 util.dprintln(3, "ERROR(loadImage): JIMIException");
62 throw new FileOpException("Unable to load File!"+e);
63 }
64 if (img == null) {
65 util.dprintln(3, "ERROR(loadImage): unable to load file");
66 throw new FileOpException("Unable to load File!");
67 }
68 }
69
70 /**
71 * write image of type mt to Stream
72 */
73 public void writeImage(String mt, ServletResponse res)
74 throws FileOpException {
75 try {
76 // setup output
77 res.setContentType(mt);
78 // render output
79 Jimi.putImage(mt, imgp, res.getOutputStream());
80
81 } catch (JimiException e) {
82 throw new FileOpException("Error writing image!"+e);
83 } catch (IOException e) {
84 throw new FileOpException("Error writing image."+e);
85 }
86 }
87
88 public int getWidth() {
89 if (img != null) {
90 return img.getWidth();
91 }
92 return 0;
93 }
94
95 public int getHeight() {
96 if (img != null) {
97 return img.getHeight();
98 }
99 return 0;
100 }
101
102
103 /**
104 * crop and scale image
105 * take rectangle width,height at position x_off,y_off
106 * and scale by scale
107 */
108 public void cropAndScale(int x_off, int y_off, int width, int height,
109 float scale, int qual) throws ImageOpException {
110
111 ImageFilter scaleFilter;
112 int destWidth = (int)(scale * (float)width);
113 int destHeight = (int)(scale * (float)height);
114
115 // setup Crop
116 ImageProducer croppedImg = img.getCroppedImageProducer(x_off, y_off, width, height);
117 //util.dprintln(3, "CROP:"+croppedImg.getWidth()+"x"+croppedImg.getHeight()); //DEBUG
118
119 if (croppedImg == null) {
120 util.dprintln(2, "ERROR(cropAndScale): error in crop");
121 throw new ImageOpException("Unable to crop");
122 }
123
124 // setup scale and interpolation quality
125 if (qual > 0) {
126 util.dprintln(4, "quality q1");
127 scaleFilter = new AreaAverageScaleFilter(destWidth, destHeight);
128 } else {
129 util.dprintln(4, "quality q0");
130 scaleFilter = new ReplicatingScaleFilter(destWidth, destHeight);
131 }
132
133 ImageProducer scaledImg = new FilteredImageSource(croppedImg, scaleFilter);
134
135 if (scaledImg == null) {
136 util.dprintln(2, "ERROR(cropAndScale): error in scale");
137 throw new ImageOpException("Unable to scale");
138 }
139
140 imgp = scaledImg;
141 }
142
143 }