Java压缩图片

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.text.DecimalFormat;

/*压缩图片*/
public class CompressImageByPercent {

    public static void main(String[] args) {
        //图片路径
        String localPicUrl = "";
        while (true) {
            File localPicFile = new File(localPicUrl);
            long len1 = localPicFile.length();
            double len2 = (double) len1 / 1024;
            if (len2 > 1024) {
                double ys_rate = 0.10;//压缩比例
                BufferedImage bufferedImage = compressImageByPercent(localPicFile, ys_rate);
                File destFile = saveAsImage(localPicUrl, bufferedImage);
                System.out.println("=====" + localPicUrl + "===" + readableFileSize(destFile.length()));
            } else {
                break;
            }
        }
    }

    public static BufferedImage compressImageByPercent(File file, double compressPercent) {
        BufferedImage img; //原图
        BufferedImage bufferedImage = null; //压缩后图
        int width, height;
        try {

            img = ImageIO.read(file);
            width = (int) (img.getWidth() * compressPercent);
            height = (int) (img.getHeight() * compressPercent);
            bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
            bufferedImage.getGraphics().drawImage(img, 0, 0, width, height, null);//绘制缩小图
        } catch (Exception e) {
            e.printStackTrace();
        }
        return bufferedImage;
    }

    public static String readableFileSize(long size) {
        if (size <= 0) return "0";
        final String[] units = new String[]{"B", "KB", "MB", "GB", "TB"};
        int digitGroups = (int) (Math.log10(size) / Math.log10(1024));
        return new DecimalFormat("#,##0.#").format(size / Math.pow(1024, digitGroups)) + "" + units[digitGroups];
    }

    public static File saveAsImage(String fullFilePath, BufferedImage bufferedImage) {
        File destFile = null;
        try {
            destFile = new File(fullFilePath);
            FileOutputStream out = new FileOutputStream(destFile); //输出到文件流
            ImageIO.write(bufferedImage, "png", out);
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return destFile;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值