KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > dotmarketing > util > Thumbnail


1 package com.dotmarketing.util;
2
3 /**
4  * @author Maria
5  *
6  */

7 import java.awt.Color JavaDoc;
8 import java.awt.Container JavaDoc;
9 import java.awt.Graphics2D JavaDoc;
10 import java.awt.Image JavaDoc;
11 import java.awt.MediaTracker JavaDoc;
12 import java.awt.RenderingHints JavaDoc;
13 import java.awt.Toolkit JavaDoc;
14 import java.awt.image.BufferedImage JavaDoc;
15 import java.io.BufferedOutputStream JavaDoc;
16 import java.io.File JavaDoc;
17 import java.io.FileOutputStream JavaDoc;
18
19 import com.sun.image.codec.jpeg.JPEGCodec;
20 import com.sun.image.codec.jpeg.JPEGEncodeParam;
21 import com.sun.image.codec.jpeg.JPEGImageEncoder;
22
23 public class Thumbnail {
24     
25     private static int height = 100;
26     private static int width = 100;
27
28     public static void resizeImage(String JavaDoc imagePath, String JavaDoc imageName, String JavaDoc fileExtension, Color JavaDoc bgColor) {
29         resizeImage(imagePath,imageName,fileExtension,"_thumb",height,width, bgColor);
30     }
31     
32     public static void resizeImage(String JavaDoc imagePath, String JavaDoc imageName, String JavaDoc fileExtension) {
33         Color JavaDoc bgColor = new Color JavaDoc(255,25,255);
34         resizeImage(imagePath,imageName,fileExtension,"_thumb",height,width, bgColor);
35     }
36
37     public static void resizeImage(String JavaDoc imagePath, String JavaDoc imageName, String JavaDoc fileExtension, String JavaDoc fileOutPutName, int h, int w, Color JavaDoc bgColor) {
38
39         try {
40             h = h > 0 ? h : height;
41             w = w > 0 ? w : width;
42             
43             // load image from INFILE
44
String JavaDoc fullImagePath = imagePath + imageName + "." + fileExtension;
45             Image JavaDoc image = Toolkit.getDefaultToolkit().createImage(fullImagePath);
46             Logger.debug(Thumbnail.class, "Thumbnail=" + imagePath + imageName + "." + fileExtension);
47             
48             MediaTracker JavaDoc mediaTracker = new MediaTracker JavaDoc(new Container JavaDoc());
49             mediaTracker.addImage(image, 0);
50             mediaTracker.waitForID(0);
51             
52             //delete the old thumbnail
53
new File JavaDoc(imagePath + imageName + fileOutPutName + "." + fileExtension).delete();
54             
55             // determine thumbnail size from WIDTH and HEIGHT
56
int thumbWidth = w;
57             int thumbHeight = h;
58             double thumbRatio = (double)thumbWidth / (double)thumbHeight;
59             int imageWidth = image.getWidth(null);
60             int imageHeight = image.getHeight(null);
61             
62             if ((imageWidth < w) && (imageHeight < h)) {
63                 thumbHeight = imageHeight;
64                 thumbWidth = imageWidth;
65             }
66             else {
67                 double imageRatio = (double)imageWidth / (double)imageHeight;
68                 if (thumbRatio < imageRatio) {
69                   thumbHeight = (int)Math.ceil((thumbWidth / imageRatio));
70                 } else {
71                   thumbWidth = (int)(thumbHeight * imageRatio);
72                 }
73             }
74             // draw original image to thumbnail image object and
75
// scale it to the new size on-the-fly
76
BufferedImage JavaDoc bgImage = new BufferedImage JavaDoc(w,h, BufferedImage.TYPE_INT_RGB);
77               
78             Graphics2D JavaDoc g = bgImage.createGraphics();
79             g.setColor(bgColor);
80             g.fillRect(0,0,w,h);
81             
82             BufferedImage JavaDoc thumbImage = new BufferedImage JavaDoc(thumbWidth, thumbHeight, BufferedImage.TYPE_INT_RGB);
83             // Color bgcolor = new Color(16,16,16);
84

85             Graphics2D JavaDoc graphics2D = thumbImage.createGraphics();
86             graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BICUBIC);
87             graphics2D.setRenderingHint(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY);
88             graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
89             graphics2D.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING,RenderingHints.VALUE_COLOR_RENDER_QUALITY);
90             graphics2D.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION,RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
91             graphics2D.drawImage(image, 0, 0, thumbWidth, thumbHeight , bgColor, null);
92             graphics2D.dispose();
93
94             // compute offsets to center image in its space
95
int offsetX = (w - thumbImage.getWidth()) / 2;
96             int offsetY = (h - thumbImage.getHeight()) / 2;
97             g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BICUBIC);
98             g.setRenderingHint(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY);
99             g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
100             g.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING,RenderingHints.VALUE_COLOR_RENDER_QUALITY);
101             g.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION,RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
102             g.drawImage(thumbImage, null, offsetX, offsetY);
103             g.dispose();
104             
105             
106             // save thumbnail image to OUTFILE
107
BufferedOutputStream JavaDoc out = new BufferedOutputStream JavaDoc(new FileOutputStream JavaDoc(imagePath + imageName + fileOutPutName + "." + fileExtension));
108             Logger.debug(Thumbnail.class, "Output image=" + imagePath + imageName + fileOutPutName + "." + fileExtension);
109             JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
110             JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bgImage);
111             int quality = Integer.parseInt("100");
112             quality = Math.max(0, Math.min(quality, 100));
113             param.setQuality((float)quality / 100.0f, false);
114             encoder.setJPEGEncodeParam(param);
115             encoder.encode(bgImage);
116             out.close();
117             Logger.debug(Thumbnail.class, "Done.");
118         }
119         catch (Exception JavaDoc e) {
120             Logger.error(Thumbnail.class, "e:" + e);
121             e.printStackTrace();
122         }
123         
124     }
125     
126     /**
127      * This method generate a thumbnail (.png)image without a white box behind
128      * @param imagePath The path where is gonna be the image
129      * @param imageName The image name
130      * @param fileExtension The image Extension
131      * @param fileOutPutName The thumbnail name
132      * @param h The image height
133      * @param w The Image Width
134      * @param bgColor Image BackGround COlor
135      */

136     public static void resizeImageWithNoBox(String JavaDoc imagePath, String JavaDoc imageName, String JavaDoc fileExtension, String JavaDoc fileOutPutName, int h, int w, Color JavaDoc bgColor) {
137
138         try {
139             h = h > 0 ? h : height;
140             w = w > 0 ? w : width;
141             
142             // load image from INFILE
143
String JavaDoc fullImagePath = imagePath + imageName + "." + fileExtension;
144             Image JavaDoc image = Toolkit.getDefaultToolkit().createImage(fullImagePath);
145             Logger.debug(Thumbnail.class, "Thumbnail=" + imagePath + imageName + "." + fileExtension);
146             
147             MediaTracker JavaDoc mediaTracker = new MediaTracker JavaDoc(new Container JavaDoc());
148             mediaTracker.addImage(image, 0);
149             mediaTracker.waitForID(0);
150             
151             //delete the old thumbnail
152
new File JavaDoc(imagePath + fileOutPutName + ".png").delete();
153             
154             // determine thumbnail size from WIDTH and HEIGHT
155

156             // draw original image to thumbnail image object and
157
// scale it to the new size on-the-fly
158
BufferedImage JavaDoc bgImage = new BufferedImage JavaDoc(w,h, BufferedImage.TYPE_INT_RGB);
159               
160             Graphics2D JavaDoc g = bgImage.createGraphics();
161             g.setColor(bgColor);
162             g.fillRect(0,0,w,h);
163             
164             BufferedImage JavaDoc thumbImage = new BufferedImage JavaDoc(w, h, BufferedImage.TYPE_INT_RGB);
165             
166             Graphics2D JavaDoc graphics2D = thumbImage.createGraphics();
167             graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BICUBIC);
168             graphics2D.setRenderingHint(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY);
169             graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
170             graphics2D.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING,RenderingHints.VALUE_COLOR_RENDER_QUALITY);
171             graphics2D.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION,RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
172             graphics2D.drawImage(image, 0, 0, w, h , bgColor, null);
173             graphics2D.dispose();
174
175             // compute offsets to center image in its space
176
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BICUBIC);
177             g.setRenderingHint(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY);
178             g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
179             g.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING,RenderingHints.VALUE_COLOR_RENDER_QUALITY);
180             g.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION,RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
181             g.drawImage(thumbImage, null, 0, 0);
182             g.dispose();
183             
184             
185             // save thumbnail image to OUTFILE
186
BufferedOutputStream JavaDoc out = new BufferedOutputStream JavaDoc(new FileOutputStream JavaDoc(imagePath + fileOutPutName + ".png"));
187             Logger.debug(Thumbnail.class, "Output image=" + imagePath + fileOutPutName + ".png");
188             JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
189             JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bgImage);
190             int quality = Integer.parseInt("100");
191             quality = Math.max(0, Math.min(quality, 100));
192             param.setQuality((float)quality / 100.0f, false);
193             encoder.setJPEGEncodeParam(param);
194             encoder.encode(bgImage);
195             out.close();
196             Logger.debug(Thumbnail.class, "Done.");
197         }
198         catch (Exception JavaDoc e) {
199             Logger.error(Thumbnail.class, "e:" + e);
200             e.printStackTrace();
201         }
202         
203     }
204 }
205
Popular Tags