Mir goes GPL
[mir.git] / source / mir / misc / WebdbImage.java
1 /*
2  * Copyright (C) 2001, 2002  The Mir-coders group
3  *
4  * This file is part of Mir.
5  *
6  * Mir is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * Mir is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with Mir; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  *
20  * In addition, as a special exception, The Mir-coders gives permission to link
21  * the code of this program with the com.oreilly.servlet library, any library
22  * licensed under the Apache Software License, The Sun (tm) Java Advanced
23  * Imaging library (JAI), The Sun JIMI library (or with modified versions of
24  * the above that use the same license as the above), and distribute linked
25  * combinations including the two.  You must obey the GNU General Public
26  * License in all respects for all of the code used other than the above
27  * mentioned libraries.  If you modify this file, you may extend this exception
28  * to your version of the file, but you are not obligated to do so.  If you do
29  * not wish to do so, delete this exception statement from your version.
30  */
31
32 package mir.misc;
33
34 /**
35  * Title:
36  * Description:
37  * Copyright:    Copyright (c) 2001
38  * Company:      Indymedia
39  * @author
40  * @version 1.0
41  */
42
43 import java.io.*;
44 import java.util.Vector;
45 import javax.media.jai.*;
46 import com.sun.media.jai.codec.*;
47 import java.awt.image.renderable.ParameterBlock;
48
49 public class WebdbImage
50 {
51
52         // default values for scaling
53         private int               maxIconSize=120;
54         private int               maxImageSize=640;
55
56         private byte[]            iconData;
57         private byte[]            imageData;
58         private int               iconWidth;
59         private int               iconHeight;
60
61         // internal representation of the image
62         private PlanarImage       planarImage;
63
64   // type of the image
65   private String _type;
66
67
68         // constructor
69         public WebdbImage(byte[] image, String type)
70                 throws IOException
71         {
72                 planarImage = JAI.create("stream",new ByteArraySeekableStream(image));
73     _type = type;
74                 scaleImage();
75         }
76
77         public WebdbImage(byte[] image, String type, int iconMax)
78                 throws IOException
79         {
80                 maxIconSize=iconMax;
81                 planarImage = JAI.create("stream",new ByteArraySeekableStream(image));
82     _type = type;
83                 scaleImage();
84         }
85
86         public WebdbImage(byte[] image, String type, int iconMax, int imageMax)
87                 throws IOException
88         {
89                 maxIconSize=iconMax;
90                 maxImageSize=imageMax;
91                 planarImage = JAI.create("stream",new ByteArraySeekableStream(image));
92     _type = type;
93                 scaleImage();
94         }
95
96         // acc3ssor-methods
97         public int getIconWidth() throws IOException {
98                 if (iconData==null) scaleIcon();
99                 return iconWidth;
100         }
101
102         public int getIconHeight() throws IOException {
103                 if (iconData==null) scaleIcon();
104                 return iconHeight;
105         }
106
107         public int getImageWidth() {
108                 return (int)planarImage.getWidth();
109         }
110
111         public int getImageHeight() {
112                 return (int)planarImage.getHeight();
113         }
114
115         public byte[] getImage() {
116                 if (imageData==null) {
117                         ByteArrayOutputStream outStream = new ByteArrayOutputStream();
118       JAI.create("encode", planarImage, outStream, _type, null);
119                         imageData = outStream.toByteArray();
120                 }
121                 return imageData;
122         }
123
124         public byte[] getIcon()
125                 throws IOException
126         {
127                 if (iconData == null) scaleIcon();
128                 return iconData;
129         }
130
131         private void scaleImage()
132                 throws java.io.IOException
133         {
134                 if (maxImageSize>0 && ( getImageHeight()> maxImageSize|| getImageWidth() >maxImageSize))
135                 {
136       System.out.println("SCALE_IMAGE");
137                         float scale;
138       ParameterBlockJAI params = new ParameterBlockJAI("scale");
139       params.addSource(planarImage);
140                         if (getImageHeight() > getImageWidth())
141         scale = (float)maxImageSize / (float)getImageHeight();
142       else
143         scale = (float)maxImageSize / (float)getImageWidth();
144
145       params.setParameter("xScale", scale);
146       params.setParameter("yScale", scale);
147                         params.setParameter("xTrans",0.0F);
148                         params.setParameter("yTrans",0.0F);
149                         params.setParameter("interpolation",new InterpolationBilinear());
150                         planarImage = JAI.create("scale", params);
151                 }
152         }
153
154         private void scaleIcon()
155                 throws java.io.IOException
156         {
157     System.out.println("SCALE_ICON");
158                 if (iconData==null) {
159                         float scale;
160       ParameterBlockJAI params = new ParameterBlockJAI("scale");
161       params.addSource(planarImage);
162                         if (getImageHeight() > getImageWidth())
163         scale = (float)maxIconSize / (float)getImageHeight();
164       else
165         scale = (float)maxIconSize / (float)getImageWidth();
166
167       params.setParameter("xScale", scale);
168       params.setParameter("yScale", scale);
169                         params.setParameter("xTrans",0.0F);
170                         params.setParameter("yTrans",0.0F);
171                         params.setParameter("interpolation",new InterpolationBilinear());
172       PlanarImage temp = JAI.create("scale", params);
173                         ByteArrayOutputStream outStream = new ByteArrayOutputStream();
174       JAI.create("encode", temp, outStream, _type, null);
175                         iconData = outStream.toByteArray();
176                         iconWidth=temp.getWidth();
177                         iconHeight=temp.getHeight();
178                 }
179         }
180
181 }