make image/gif and image/png images be converted into PNG format. everything else...
[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   // type of the image
34   private String _type;
35
36
37         // constructor
38         public WebdbImage(byte[] image, String type)
39                 throws IOException
40         {
41                 planarImage = JAI.create("stream",new ByteArraySeekableStream(image));
42     _type = type;
43                 scaleImage();
44         }
45
46         public WebdbImage(byte[] image, String type, int iconMax)
47                 throws IOException
48         {
49                 maxIconSize=iconMax;
50                 planarImage = JAI.create("stream",new ByteArraySeekableStream(image));
51     _type = type;
52                 scaleImage();
53         }
54
55         public WebdbImage(byte[] image, String type, int iconMax, int imageMax)
56                 throws IOException
57         {
58                 maxIconSize=iconMax;
59                 maxImageSize=imageMax;
60                 planarImage = JAI.create("stream",new ByteArraySeekableStream(image));
61     _type = type;
62                 scaleImage();
63         }
64
65         // acc3ssor-methods
66         public int getIconWidth() throws IOException {
67                 if (iconData==null) scaleIcon();
68                 return iconWidth;
69         }
70
71         public int getIconHeight() throws IOException {
72                 if (iconData==null) scaleIcon();
73                 return iconHeight;
74         }
75
76         public int getImageWidth() {
77                 return (int)planarImage.getWidth();
78         }
79
80         public int getImageHeight() {
81                 return (int)planarImage.getHeight();
82         }
83
84         public byte[] getImage() {
85                 if (imageData==null) {
86                         ByteArrayOutputStream outStream = new ByteArrayOutputStream();
87       JAI.create("encode", planarImage, outStream, _type, null);
88                         imageData = outStream.toByteArray();
89                 }
90                 return imageData;
91         }
92
93         public byte[] getIcon()
94                 throws IOException
95         {
96                 if (iconData == null) scaleIcon();
97                 return iconData;
98         }
99
100         private void scaleImage()
101                 throws java.io.IOException
102         {
103                 if (maxImageSize>0 && ( getImageHeight()> maxImageSize|| getImageWidth() >maxImageSize))
104                 {
105       System.out.println("SCALE_IMAGE");
106                         float scale;
107       ParameterBlockJAI params = new ParameterBlockJAI("scale");
108       params.addSource(planarImage);
109                         if (getImageHeight() > getImageWidth())
110         scale = (float)maxImageSize / (float)getImageHeight();
111       else
112         scale = (float)maxImageSize / (float)getImageWidth();
113
114       params.setParameter("xScale", scale);
115       params.setParameter("yScale", scale);
116                         params.setParameter("xTrans",0.0F);
117                         params.setParameter("yTrans",0.0F);
118                         params.setParameter("interpolation",new InterpolationBilinear());
119                         planarImage = JAI.create("scale", params);
120                 }
121         }
122
123         private void scaleIcon()
124                 throws java.io.IOException
125         {
126     System.out.println("SCALE_ICON");
127                 if (iconData==null) {
128                         float scale;
129       ParameterBlockJAI params = new ParameterBlockJAI("scale");
130       params.addSource(planarImage);
131                         if (getImageHeight() > getImageWidth())
132         scale = (float)maxIconSize / (float)getImageHeight();
133       else
134         scale = (float)maxIconSize / (float)getImageWidth();
135
136       params.setParameter("xScale", scale);
137       params.setParameter("yScale", scale);
138                         params.setParameter("xTrans",0.0F);
139                         params.setParameter("yTrans",0.0F);
140                         params.setParameter("interpolation",new InterpolationBilinear());
141       PlanarImage temp = JAI.create("scale", params);
142                         ByteArrayOutputStream outStream = new ByteArrayOutputStream();
143       JAI.create("encode", temp, outStream, _type, null);
144                         iconData = outStream.toByteArray();
145                         iconWidth=temp.getWidth();
146                         iconHeight=temp.getHeight();
147                 }
148         }
149
150 }