1package com.test; 2 3import com.sun.image.codec.jpeg.JPEGCodec; 4import com.sun.image.codec.jpeg.JPEGImageEncoder; 5import org.junit.Test; 6import javax.imageio.ImageIO; 7import java.awt.*; 8import java.awt.image.BufferedImage; 9import java.io.File; 10import java.io.FileOutputStream; 11import java.io.IOException; 12 13/** 14 *图片压缩 15 */ 16public class ImageTest { 17 18 private Image img; 19 private int width; 20 private int height; 21 22 @Test 23 public void test(){ 24 try{ 25 //压缩开始 26 ImageTest imgCom = new ImageTest("D://1.png"); 27 imgCom.resizeFix(400, 400,"D://2.png"); 28 //压缩结束 29 }catch (Exception e){ 30 e.printStackTrace(); 31 } 32 } 33 34 /** 35 * 构造函数 36 * @param fileName 图片路径 37 * @throws IOException 38 */ 39 public ImageTest(String fileName) throws IOException { 40 // 读入文件 41 File file = new File(fileName); 42 // 构造Image对象 43 img = ImageIO.read(file); 44 // 得到源图宽 45 width = img.getWidth(null); 46 // 得到源图长 47 height = img.getHeight(null); 48 } 49 50 /** 51 * 按照宽度还是高度进行压缩 52 * @param w int 最大宽度 53 * @param h int 最大高度 54 * @param filePath 图片路径 55 * @throws IOException 56 */ 57 public void resizeFix(int w, int h,String filePath) throws IOException { 58 if (width / height > w / h) { 59 resizeByWidth(w,filePath); 60 } else { 61 resizeByHeight(h,filePath); 62 } 63 } 64 65 /** 66 * 以宽度为基准,等比例放缩图片 67 * @param w int 新宽度 68 * @param filePath 图片路径 69 * @throws IOException 70 */ 71 public void resizeByWidth(int w,String filePath) throws IOException { 72 int h = (int) (height * w / width); 73 resize(w, h,filePath); 74 } 75 76 /** 77 * 以高度为基准,等比例缩放图片 78 * @param h int 新高度 79 * @param filePath 图片路径 80 * @throws IOException 81 */ 82 public void resizeByHeight(int h,String filePath) throws IOException { 83 int w = (int) (width * h / height); 84 resize(w, h,filePath); 85 } 86 87 /** 88 * 强制压缩/放大图片到固定的大小 89 * @param w int 新宽度 90 * @param h int 新高度 91 * @param filePath 92 * @throws IOException 93 */ 94 public void resize(int w, int h,String filePath) throws IOException { 95 // SCALE_SMOOTH 的缩略算法 生成缩略图片的平滑度的 优先级比速度高 生成的图片质量比较好 但速度慢 96 BufferedImage image = new BufferedImage(w, h,BufferedImage.TYPE_INT_RGB ); 97 // 绘制缩小后的图 98 image.getGraphics().drawImage(img, 0, 0, w, h, null); 99 File destFile = new File(filePath); 100 // 输出到文件流 101 FileOutputStream out = new FileOutputStream(destFile); 102 // 可以正常实现bmp、png、gif转jpg 103 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); 104 // JPEG编码 105 encoder.encode(image); 106 out.close(); 107 } 108}
Java图片压缩
Wesley13
2021-10-11
1193 0 0
点赞
收藏
评论区
加载中...