After blogging about how Lotus Connetions teaches you to scale images in Java the other day I was contacted by Lotus Support who really would like to see the code as customers were asking for such code. Mitch also forwarded me a response from Lotus Support where they referred to my blog post which I got a real kick out of… 🙂
So here’s the code. Thanks to the customer for allowing me to blog the code. Use to your hearts content but don’t blame me if it doesn’t work for you. The disclaimer is there for a reason.
import java.awt.Color; import java.awt.Graphics2D; import java.awt.Image; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import java.io.IOError; import java.io.IOException; import javax.imageio.ImageIO; public class ScalePicture { public static void main(String[] args) { try { File f = new File("d:\images"); File pictSrc = new File(f, "source_photo.jpg"); File pictDest = new File(f, "destination_photo.jpg"); if (pictDest.exists()) { System.out.println("deleting..."); pictDest.delete(); } // scale image BufferedImage img = scaleImage(pictSrc); // write to target image ImageIO.write(img, "jpg", pictDest); } catch (Throwable t) { t.printStackTrace(); } } private static BufferedImage scaleImage(File source) throws IOException { // declarations final int width = 115; final int height = 115; // read source image BufferedImage imgSrc = ImageIO.read(source); // calculate scale factor double scaleFactor = (double)imgSrc.getWidth() / (double)width; // scale image BufferedImage imgScaled = new BufferedImage((int) (scaleFactor * 100), height, BufferedImage.TYPE_INT_RGB); AffineTransform transform = AffineTransform. getScaleInstance(scaleFactor, scaleFactor); Graphics2D g = imgScaled.createGraphics(); g.drawRenderedImage(imgSrc, transform); g.dispose(); // create new target image in correct size // with white background BufferedImage imgResized = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); g = imgResized.createGraphics(); g.setBackground(Color.WHITE); g.fillRect(0, 0, width, height); // calculate offset for scaled image on new image int xoffset = (int)((double)(width - imgScaled.getWidth()) / (double)2); // draw scaled image on new image g.drawImage(imgScaled, xoffset, 0, null); g.dispose(); // return new image return imgResized; } }