View Javadoc

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  		// Create BufferedImage
86  		BufferedImage bi = null;
87  		try
88  		{
89  			// load file from disk using Sun's JPEGIMageDecoder
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 			// save image as Jpeg
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 }