package org.toobs.framework.pres.util; import java.awt.Graphics2D; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import javax.imageio.ImageIO; public class ThumbUtil { private static ThumbUtil instance = null; private ThumbUtil() { } public static ThumbUtil getInstance() { if (instance == null) { instance = new ThumbUtil(); } return instance; } public boolean createThumbNail( File imageFile, File thumbNailFile, int thumbQuality, int targetThumbWidth, int targetThumbHeight) throws Exception { Image image = ImageIO.read(imageFile); int actualThumbWidth = targetThumbWidth; int actualThumbHeight = targetThumbHeight; double thumbRatio = (double) targetThumbWidth / (double) targetThumbHeight; // Image dimensions. int imageWidth = image.getWidth(null); int imageHeight = image.getHeight(null); double imageRatio = (double) imageWidth / (double) imageHeight; // Image thumbnail logic. if (thumbRatio > imageRatio) { actualThumbHeight = (int) (targetThumbWidth / imageRatio); } else { actualThumbWidth = (int) (targetThumbHeight * imageRatio); } BufferedImage scaled = new BufferedImage(actualThumbWidth, actualThumbHeight, BufferedImage.TYPE_INT_BGR); // Scale operation Image scaledImg = image.getScaledInstance(actualThumbWidth, actualThumbHeight, Image.SCALE_SMOOTH); Graphics2D bg = scaled.createGraphics(); bg.drawImage(scaledImg, 0, 0, null); bg.dispose(); // Crop operation int xOffset = (actualThumbWidth - targetThumbWidth) / 2; int yOffset = (actualThumbHeight - targetThumbHeight) / 2; BufferedImage thumbImage = scaled.getSubimage(xOffset, yOffset, targetThumbWidth, targetThumbHeight); BufferedOutputStream out = null; boolean written = false; try { out = new BufferedOutputStream(new FileOutputStream(thumbNailFile)); written = ImageIO.write(thumbImage, "jpg", out); } finally { try { if (out != null) { out.close(); } } catch (IOException ioe) {} } return written; } public static void main(String args[]) throws Exception { /* String baseDir = System.getProperty("user.home") + "/thumbtest"; String indexPage = "<html>\n"; indexPage += "<head>\n"; indexPage += "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"/>\n"; indexPage += "<title>Site Status</title>\n"; indexPage += "</head>\n"; indexPage += "<body>\n"; indexPage += "<div>\n"; indexPage += "<ul>\n"; int dim = 96; File indexFile = new File(baseDir + "/index.htm"); String fileName = "paddy"; String bmpFilePath = baseDir + "/" + fileName + ".bmp"; String jpgFilePath = baseDir + "/" + fileName + ".jpg"; File bmpSource = new File(bmpFilePath); File jpgDest = new File(jpgFilePath); boolean done = ThumbUtil.getInstance().createThumbNail(bmpSource, jpgDest, 100, dim, dim); indexPage += "<li>"; indexPage += "<img src=\"" + fileName + ".jpg\"/>"; indexPage += "<span>" + fileName + ".jpg</span>"; indexPage += "</li>"; fileName = "787621810_l"; bmpFilePath = baseDir + "/" + fileName + ".gif"; jpgFilePath = baseDir + "/" + fileName + ".jpg"; bmpSource = new File(bmpFilePath); jpgDest = new File(jpgFilePath); done = ThumbUtil.getInstance().createThumbNail(bmpSource, jpgDest, 100, dim, dim); indexPage += "<li>"; indexPage += "<img src=\"" + fileName + ".jpg\"/>"; indexPage += "<span>" + fileName + ".jpg</span>"; indexPage += "</li>"; //fileName = "newBrowse_snap"; //bmpFilePath = baseDir + "/" + fileName + ".tiff"; //jpgFilePath = baseDir + "/" + fileName + ".jpg"; //bmpSource = new File(bmpFilePath); //jpgDest = new File(jpgFilePath); done = ThumbUtil.getInstance().createThumbNail(bmpSource, jpgDest, 100, dim, dim); fileName = "3cb4ae70-95e0-1029-8bab-00304885b7c6"; bmpFilePath = baseDir + "/" + fileName + ".bmp"; jpgFilePath = baseDir + "/" + fileName + ".jpg"; bmpSource = new File(bmpFilePath); jpgDest = new File(jpgFilePath); done = ThumbUtil.getInstance().createThumbNail(bmpSource, jpgDest, 100, dim, dim); indexPage += "<li>"; indexPage += "<img src=\"" + fileName + ".jpg\"/>"; indexPage += "<span>" + fileName + ".jpg</span>"; indexPage += "</li>"; //fileName = "try_mac"; //bmpFilePath = baseDir + "/" + fileName + ".tiff"; //jpgFilePath = baseDir + "/" + fileName + "_t_to_j.jpg"; //bmpSource = new File(bmpFilePath); //jpgDest = new File(jpgFilePath); //done = ThumbUtil.getInstance().createThumbNail(bmpSource, jpgDest, 100, dim, dim); indexPage += "</ul>"; indexPage += "</div>"; //indexPage += "<iframe src=\"" + rgbFile + "\" height=\"800\" width=\"300\"/>"; indexPage += "</body>"; indexPage += "</html>"; OutputStream os = new FileOutputStream(indexFile); os.write(indexPage.getBytes("UTF-8")); os.flush(); os.close(); */ } }