added back in Producer.Content.Batchsize
[mir.git] / jmagick / WebdbImage.java.jmagick
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.awt.image.renderable.ParameterBlock;
14 import java.awt.Dimension;
15 import java.awt.Rectangle;
16 import magick.*;
17
18 public class WebdbImage
19 {
20
21     private Logfile theLog = Logfile.getInstance(MirConfig.getPropWithHome("HTMLTemplateProcessor.Logfile"));
22         // imageTypes
23         public final static int        WEBDB_JPG=0;
24         public final static int        WEBDB_GIF=1;
25
26         // default values for scaling
27         private int               maxIconSize=120;
28         private int               maxImageSize=640;
29
30         private byte[]            iconData;
31         private byte[]            imageData;
32         private int               imageType;
33         private int               iconWidth;
34         private int               iconHeight;
35
36         // internal representation of the image
37         private MagickImage       magickImage;
38
39
40         // constructor
41         public WebdbImage(byte[] image, int type)
42                 throws IOException
43         {
44                 imageType=type;
45         try {
46             magickImage = new MagickImage(new ImageInfo(), image);
47         } catch (MagickException e) {theLog.printDebugInfo("fail: "+e.toString());}
48                 scaleImage();
49         }
50
51         public WebdbImage(byte[] image, int type, int iconMax)
52                 throws IOException
53         {
54                 imageType=type;
55                 maxIconSize=iconMax;
56         try {
57             magickImage = new MagickImage(new ImageInfo(), image);
58         } catch (MagickException e) {theLog.printDebugInfo("fail: "+e.toString());}
59                 scaleImage();
60         }
61
62         public WebdbImage(byte[] image, int type, int iconMax, int imageMax)
63                 throws IOException
64         {
65                 imageType=type;
66                 maxIconSize=iconMax;
67                 maxImageSize=imageMax;
68         try {
69             magickImage = new MagickImage(new ImageInfo(), image);
70         } catch (MagickException e) {theLog.printDebugInfo("fail: "+e.toString());}
71                 scaleImage();
72         }
73
74
75         // acc3ssor-methods
76         public int getIconWidth() throws IOException {
77                 if (iconData==null) scaleIcon();
78                 return iconWidth;
79         }
80
81         public int getIconHeight() throws IOException {
82                 if (iconData==null) scaleIcon();
83                 return iconHeight;
84         }
85
86         public int getImageWidth() {
87         try {
88             return (int)magickImage.getDimension().getWidth();
89         } catch (MagickException e) { return -1;}
90         }
91
92         public int getImageHeight() {
93         int gg;
94         try {
95                     return (int)magickImage.getDimension().getHeight();
96         } catch (MagickException e) { return -1;}
97         }
98
99         public byte[] getImage() {
100                 if (imageData==null) {
101             try {
102                 ImageInfo imageInfo = new ImageInfo();
103                 imageInfo.init();
104
105                 switch (imageType) {
106                     case WEBDB_JPG:
107                         imageInfo.setMagickMember("JPG");
108                     case WEBDB_GIF:
109                         imageInfo.setMagickMember("JPG");
110                 }
111
112                 imageData = magickImage.imageToBlob(imageInfo);
113             } catch (MagickException e) {
114                 theLog.printDebugInfo("getImage: magick "+e.toString());
115             }
116         }
117         return imageData;
118         }
119
120         public byte[] getIcon()
121                 throws IOException
122         {
123                 if (iconData == null) scaleIcon();
124                 return iconData;
125         }
126
127         private void scaleImage()
128                 throws java.io.IOException
129         {
130                 if (maxImageSize>0 && ( getImageHeight()> maxImageSize|| getImageWidth() >maxImageSize))
131                 {
132                         float scale;
133                         if (getImageHeight() > getImageWidth())
134                                 scale = (float)maxImageSize / (float)getImageHeight();
135                         else
136                                 scale = (float)maxImageSize / (float)getImageWidth();
137
138             try {
139                             magickImage = magickImage.scaleImage((int)scale*getImageWidth(), (int)scale*getImageHeight());
140             } catch (MagickException e) {}
141                 }
142         }
143
144         private void scaleIcon()
145                 throws java.io.IOException
146         {
147                 if (iconData==null) {
148                         float scale;
149                         if (getImageHeight() > getImageWidth())
150                                 scale = (float)maxIconSize / (float)getImageHeight();
151                         else
152                                 scale = (float)maxIconSize / (float)getImageWidth();
153
154             try {
155                             MagickImage temp = magickImage.scaleImage((int)(scale*getImageWidth()), (int)(scale*getImageHeight()));
156                 ImageInfo imageInfo = new ImageInfo();
157                 imageInfo.init();
158                 /** @todo gif */
159                 switch (imageType) {
160                     case WEBDB_JPG:
161                         imageInfo.setMagickMember("JPG");
162                     case WEBDB_GIF:
163                         imageInfo.setMagickMember("JPG");
164                 }
165                 iconWidth=(int)temp.getDimension().getWidth();
166                 iconHeight=(int)temp.getDimension().getHeight();
167                 // Put a black rectangle around the border
168                 DrawInfo drawInfo = new DrawInfo(imageInfo);
169                 drawInfo.setPrimitive("Rectangle 0 0 "+(iconWidth-1)+" "+(iconHeight-1));
170                 drawInfo.setStroke(PixelPacket.queryColorDatabase("black"));
171                 temp.drawImage(drawInfo);
172                 iconData = temp.imageToBlob(imageInfo);
173             } catch (MagickException e) {}
174                 }
175         }
176
177 }