1 /**************************************************************************
2 Copyright 2005 Webstersmalley
3
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15 *************************************************************************/
16
17
18 package com.webstersmalley.picweb.utils;
19
20 import java.awt.Graphics;
21 import java.awt.geom.AffineTransform;
22 import java.awt.image.AffineTransformOp;
23 import java.awt.image.BufferedImage;
24 import java.io.File;
25 import java.io.FileInputStream;
26 import java.io.FileOutputStream;
27 import java.io.IOException;
28
29 import org.apache.commons.logging.Log;
30 import org.apache.commons.logging.LogFactory;
31
32 import com.sun.image.codec.jpeg.ImageFormatException;
33 import com.sun.image.codec.jpeg.JPEGCodec;
34 import com.sun.image.codec.jpeg.JPEGEncodeParam;
35 import com.sun.image.codec.jpeg.JPEGImageDecoder;
36 import com.sun.image.codec.jpeg.JPEGImageEncoder;
37
38 /***
39 * @author Matthew Smalley
40 */
41 public class ImageManipulator
42 {
43 /*** Logger for the class. */
44 private static Log log = LogFactory.getLog(ImageManipulator.class);
45
46 private ImageManipulator()
47 {
48
49 }
50
51 private static final float QUALITY = 0.75f;
52
53 public static void resizeImage(File source, File destination, int targetSize) throws ImageFormatException, IOException
54 {
55 BufferedImage image = loadBufferedImage(source);
56 double scale;
57 if (image.getHeight() > image.getWidth())
58 {
59 scale = (double)targetSize / image.getHeight();
60 }
61 else
62 {
63 scale = (double)targetSize / image.getWidth();
64 }
65
66 log.debug("Creating file: " + destination.getAbsolutePath());
67
68 image = scale(scale, image);
69 saveImageToDisk(image, destination);
70 }
71
72 public static BufferedImage createImageFromString(String text, int width, int height, int x, int y)
73 {
74 BufferedImage image = new BufferedImage( width, height, BufferedImage.TYPE_INT_RGB);
75
76 Graphics gc = image.getGraphics();
77
78 gc.setColor(java.awt.Color.white);
79 gc.drawString(text, x, y);
80 return image;
81 }
82
83 public static BufferedImage loadBufferedImage(File input)
84 {
85
86 BufferedImage bi = null;
87 try
88 {
89
90 FileInputStream fis = new FileInputStream(input);
91 JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(fis);
92 bi = decoder.decodeAsBufferedImage();
93 fis.close();
94 } catch (Exception e)
95 {
96 }
97 return bi;
98 }
99
100 private static BufferedImage scale(double scale, BufferedImage srcImg)
101 {
102 if (scale == 1)
103 {
104 return srcImg;
105 }
106 AffineTransformOp op = new AffineTransformOp(AffineTransform
107 .getScaleInstance(scale, scale), null);
108 return op.filter(srcImg, null);
109 }
110
111 public static void saveImageToDisk(BufferedImage bi, File output) throws ImageFormatException, IOException
112 {
113 if (bi != null)
114 {
115
116
117 FileOutputStream out = null;
118 out = new FileOutputStream(output);
119
120 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
121 JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
122 param.setQuality(QUALITY, false);
123
124 encoder.encode(bi);
125 out.close();
126 }
127 }
128 }