Java原生ImageIO实现图片压缩功能

亲测可用

package org.jeecg.common.util;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;
import javax.imageio.stream.ImageOutputStream;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class ImgCompressUtil {

    /**
     * 
     * @param srcFilePath  原图地址
     * @param descFilePath 缩略图地址
     * @param quality      压缩程度,参数qality是取值0~1范围内
     * @param uuid         日志记录使用
     * @return
     * @throws IOException
     */
    public static Boolean compressPic(String srcFilePath, String descFilePath, Float quality, String uuid)
            throws IOException {
        ImageWriter writer = null;
        OutputStream out = null;
        ImageOutputStream ios = null;
        try {
            File input = new File(srcFilePath);
            BufferedImage image = ImageIO.read(input);
            // 指定写图片的方式为 jpg
            writer = ImageIO.getImageWritersByFormatName("jpg").next();
            // 先指定Output,才能调用writer.write方法
            File output = new File(descFilePath);
            out = new FileOutputStream(output);
            ios = ImageIO.createImageOutputStream(out);
            writer.setOutput(ios);

            ImageWriteParam param = writer.getDefaultWriteParam();
            if (param.canWriteCompressed()) {
                // 指定压缩方式为MODE_EXPLICIT
                param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
                // 压缩程度,参数qality是取值0~1范围内
                param.setCompressionQuality(quality);
            }
            // 调用write方法,向输入流写图片
            writer.write(null, new IIOImage(image, null, null), param);
            return true;
        } catch (Exception e) {
            log.error("uuid:{},ImgCompressUtil--compressPic, 图片压缩失败 {} ", uuid, e);
            return false;
        } finally {
            if (out != null) {
                out.close();
            }
            if (ios != null) {
                ios.close();
            }
            if (writer != null) {
                writer.dispose();
            }
        }
    }

    public static void main(String[] args) throws IOException {
        long start = System.currentTimeMillis();
        String srcFilePath = "C:\\Users\\Administrator\\Desktop\\ybplus\\正面.jpg";
        String descFilePath = "C:\\Users\\Administrator\\Desktop\\ybplus\\正面_缩略图.jpg";
        Float quality = 0.25f;
        String uuid = UUIDGenerator.generate();
        compressPic(srcFilePath, descFilePath, quality, uuid);
        long end = System.currentTimeMillis();
        System.out.println("压缩时间:" + (end - start) + "ms");
    }
}

注:以上内容仅提供参考和交流,请勿用于商业用途,如有侵权联系本人删除! 

你可能感兴趣的:(工具类,java)