quick hack to use JPEG again. better solution on the way.
[mir.git] / source / mir / misc / WebdbImage.java
1 package mir.misc;
2
3 /**
4  * Title:
5  * Description:
6  * Copyright:    Copyright (c) 2001
7  * Company:      Indymedia
8  * @author
9  * @version 1.0
10  */
11
12 import java.io.*;
13 import java.util.Vector;
14 import javax.media.jai.*;
15 import com.sun.media.jai.codec.*;
16 import java.awt.image.renderable.ParameterBlock;
17
18 public class WebdbImage
19 {
20
21         // default values for scaling
22         private int               maxIconSize=120;
23         private int               maxImageSize=640;
24
25         private byte[]            iconData;
26         private byte[]            imageData;
27         private int               iconWidth;
28         private int               iconHeight;
29
30         // internal representation of the image
31         private PlanarImage       planarImage;
32
33
34         // constructor
35         public WebdbImage(byte[] image)
36                 throws IOException
37         {
38                 planarImage = JAI.create("stream",new ByteArraySeekableStream(image));
39                 scaleImage();
40         }
41
42         public WebdbImage(byte[] image, int iconMax)
43                 throws IOException
44         {
45                 maxIconSize=iconMax;
46                 planarImage = JAI.create("stream",new ByteArraySeekableStream(image));
47                 scaleImage();
48         }
49
50         public WebdbImage(byte[] image, int iconMax, int imageMax)
51                 throws IOException
52         {
53                 maxIconSize=iconMax;
54                 maxImageSize=imageMax;
55                 planarImage = JAI.create("stream",new ByteArraySeekableStream(image));
56                 scaleImage();
57         }
58
59
60         // acc3ssor-methods
61         public int getIconWidth() throws IOException {
62                 if (iconData==null) scaleIcon();
63                 return iconWidth;
64         }
65
66         public int getIconHeight() throws IOException {
67                 if (iconData==null) scaleIcon();
68                 return iconHeight;
69         }
70
71         public int getImageWidth() {
72                 return (int)planarImage.getWidth();
73         }
74
75         public int getImageHeight() {
76                 return (int)planarImage.getHeight();
77         }
78
79         public byte[] getImage() {
80                 if (imageData==null) {
81                         ByteArrayOutputStream outStream = new ByteArrayOutputStream();
82             // @todo the choice of PNG or JPEG should be made configurable
83             JAI.create("encode", planarImage, outStream, "JPEG", null);
84                         imageData = outStream.toByteArray();
85                 }
86                 return imageData;
87         }
88
89         public byte[] getIcon()
90                 throws IOException
91         {
92                 if (iconData == null) scaleIcon();
93                 return iconData;
94         }
95
96         private void scaleImage()
97                 throws java.io.IOException
98         {
99                 if (maxImageSize>0 && ( getImageHeight()> maxImageSize|| getImageWidth() >maxImageSize))
100                 {
101       System.out.println("SCALE_IMAGE");
102                         float scale;
103       ParameterBlockJAI params = new ParameterBlockJAI("scale");
104       params.addSource(planarImage);
105                         if (getImageHeight() > getImageWidth())
106         scale = (float)maxImageSize / (float)getImageHeight();
107       else
108         scale = (float)maxImageSize / (float)getImageWidth();
109
110       params.setParameter("xScale", scale);
111       params.setParameter("yScale", scale);
112                         params.setParameter("xTrans",0.0F);
113                         params.setParameter("yTrans",0.0F);
114                         params.setParameter("interpolation",new InterpolationBilinear());
115                         planarImage = JAI.create("scale", params);
116                 }
117         }
118
119         private void scaleIcon()
120                 throws java.io.IOException
121         {
122     System.out.println("SCALE_ICON");
123                 if (iconData==null) {
124                         float scale;
125       ParameterBlockJAI params = new ParameterBlockJAI("scale");
126       params.addSource(planarImage);
127                         if (getImageHeight() > getImageWidth())
128         scale = (float)maxIconSize / (float)getImageHeight();
129       else
130         scale = (float)maxIconSize / (float)getImageWidth();
131
132       params.setParameter("xScale", scale);
133       params.setParameter("yScale", scale);
134                         params.setParameter("xTrans",0.0F);
135                         params.setParameter("yTrans",0.0F);
136                         params.setParameter("interpolation",new InterpolationBilinear());
137       PlanarImage temp = JAI.create("scale", params);
138                         ByteArrayOutputStream outStream = new ByteArrayOutputStream();
139             // @todo the choice of PNG or JPEG should be made configurable
140             JAI.create("encode", temp, outStream, "JPEG", null);
141                         iconData = outStream.toByteArray();
142                         iconWidth=temp.getWidth();
143                         iconHeight=temp.getHeight();
144                 }
145         }
146
147 }