前言
批量压缩图片
系统中有上传图片的功能,之前上传图片没有进行压缩。今日有需求导出之前的图片。结果发现导出时间过长。所以将文件从服务器取了出来,批量压缩了下
这里吐槽下,网上的批量压缩工具竟然要钱!!!呵呵了,我搬砖是为了啥~
提示:以下是本篇文章正文内容,下面案例可供参考
一、临时编写一个main方法
思路:递归的方法,获取文件夹中所有的图片输出其路径,并且压缩图片,替换原文件
public static void main(String[] args) {
//根据给定一个路径创建一个File对象‘
File srcFile = new File("C:\\Users\\zhanghj\\Desktop\\2022");
//调用方法
getAllFilePath(srcFile);
}
二、递归出图片并压缩
代码如下(示例):
public static void getAllFilePath(File srcFile) {
//获取给定的File目录下所有文件或者目录下的所有File数组
File[] fileArray = srcFile.listFiles();
//遍历File数组,得到每个File对象
if (fileArray != null) {//提高程序的健壮性
for (File file : fileArray){
//判断File对象是否为目录
if(file.isDirectory()){
//如果是,调用递归
getAllFilePath(file);
}else {
//获取绝对路径输出在控制台
System.out.println(file.getAbsoluteFile());
try {
//图片所在路径--传的是递归出的路径,即上面打印的
BufferedImage templateImage = ImageIO.read(new File(file.getAbsoluteFile().toString()));
//原始图片的长度和宽度
int height = templateImage.getHeight();
int width = templateImage.getWidth();
//通过比例压缩
float scale = 0.5f;
//压缩之后的长度和宽度
int doWithHeight = (int) (scale * height);
int dowithWidth = (int) (scale * width);
BufferedImage finalImage = new BufferedImage(dowithWidth, doWithHeight, BufferedImage.TYPE_INT_RGB);
finalImage.getGraphics().drawImage(templateImage.getScaledInstance(dowithWidth, doWithHeight, java.awt.Image.SCALE_SMOOTH), 0, 0, null);
//图片输出路径,以及图片名,也是上面打印的,会自己替换
FileOutputStream fileOutputStream = new FileOutputStream(file.getAbsoluteFile().toString());
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fileOutputStream);
encoder.encode(finalImage);
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
总结
搬砖结束,省了几十大洋。此处记录下,给兄弟们省钱