Java實現圖片壓縮程式碼,圖片大小轉換
阿新 • • 發佈:2019-01-01
package org.util; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.awt.image.CropImageFilter; import java.awt.image.FilteredImageSource; import java.awt.image.ImageFilter; import java.io.File; import java.io.FileOutputStream; import java.io.IOException;import java.io.OutputStream; public class ImgTools { /** * 按照 寬高 比例壓縮 * * @param img * @param width * @param height * @param out * @throws IOException */ public static void thumbnail_w_h(File img, int width, int height, OutputStream out)throws IOException { BufferedImage bi = ImageIO.read(img); double srcWidth = bi.getWidth(); // 源圖寬度 double srcHeight = bi.getHeight(); // 源圖高度 double scale = 1; if (width > 0) { scale = width / srcWidth; } if (height > 0) { scale= height / srcHeight; } if (width > 0 && height > 0) { scale = height / srcHeight < width / srcWidth ? height / srcHeight : width / srcWidth; } thumbnail(img, (int) (srcWidth * scale), (int) (srcHeight * scale), out); } /** * 按照固定寬高原圖壓縮 * * @param img * @param width * @param height * @param out * @throws IOException */ public static void thumbnail(File img, int width, int height, OutputStream out) throws IOException { BufferedImage BI = ImageIO.read(img); Image image = BI.getScaledInstance(width, height, Image.SCALE_SMOOTH); BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics g = tag.getGraphics(); g.setColor(Color.RED); g.drawImage(image, 0, 0, null); // 繪製處理後的圖 g.dispose(); ImageIO.write(tag, "JPEG", out); } /** * 按照寬高裁剪 * * @param srcImageFile * @param destWidth * @param destHeight * @param out */ public static void cut_w_h(File srcImageFile, int destWidth, int destHeight, OutputStream out) { cut_w_h(srcImageFile, 0, 0, destWidth, destHeight, out); } public static void cut_w_h(File srcImageFile, int x, int y, int destWidth, int destHeight, OutputStream out) { try { Image img; ImageFilter cropFilter; // 讀取源影象 BufferedImage bi = ImageIO.read(srcImageFile); int srcWidth = bi.getWidth(); // 源圖寬度 int srcHeight = bi.getHeight(); // 源圖高度 if (srcWidth >= destWidth && srcHeight >= destHeight) { Image image = bi.getScaledInstance(srcWidth, srcHeight, Image.SCALE_DEFAULT); cropFilter = new CropImageFilter(x, y, destWidth, destHeight); img = Toolkit.getDefaultToolkit().createImage( new FilteredImageSource(image.getSource(), cropFilter)); BufferedImage tag = new BufferedImage(destWidth, destHeight, BufferedImage.TYPE_INT_RGB); Graphics g = tag.getGraphics(); g.drawImage(img, 0, 0, null); // 繪製擷取後的圖 g.dispose(); // 輸出為檔案 ImageIO.write(tag, "JPEG", out); } } catch (Exception e) { e.printStackTrace(); } }// #cut_w_h public static void main(String[] args) throws IOException { File img = new File("e:\\a\\a.jpg"); FileOutputStream fos = new FileOutputStream("e:\\a\\b.jpg"); // ImgTools.thumbnail(img, 100, 100, fos); // ImgTools.cut_w_h(img, 230, 200, fos); ImgTools.thumbnail_w_h(img, 100, 0, fos); } }