图片批量压缩

场景描述

为便于知识共享,经常需要在word中编写帮助文档,然后导出为html格式,发布到web服务;

如果word中有图片,导出的图片文件文件一般在500kb以上,通过web浏览时非常耗时;

一般的做法是通过QQ影像软件,打开每一个图片进行一键美化,然后覆盖原有图片,这时文件大小一般能缩小一个数量级,一般在50kb左右,基本能够满足要求,虽然一个个打开修改比较繁琐,但是能用,就忍了;

但是,今天突然发现QQ影像抽风,另存为时卡死,试了几次都是这样,如是终于忍无可忍;

经过一番研究,发现java通过thumbnailator包可以实现图片压缩功能,共享实现流程如下:

技术实现

添加maven依赖

<dependency>
	<groupId>net.coobird</groupId>
	<artifactId>thumbnailator</artifactId>
	<version>0.4.8</version>
</dependency>

java代码实现

import java.io.File;
import java.io.IOException;
import java.util.Date;

import net.coobird.thumbnailator.Thumbnails;

/**
 * 图片批量压缩
 * 
 * @author hury
 * @version 2020-03-02 15:46:03
 */
public class ImageCompressor {
	public static void main(String[] args) {
		batchCompress("d:/test1", "d:/test2");
		System.out.println("压缩完成!");
	}

	/**
	 * 批量压缩图片
	 * 
	 * @param srcFolder
	 *            源目录
	 * @param targetFolder
	 *            目标目录
	 */
	public static void batchCompress(String srcFolder, String targetFolder) {
		if (srcFolder.equalsIgnoreCase(targetFolder)) {
			System.out.println("出于安全原因,源路径不能与目标路径相同!");
			return;
		}

		if (!targetFolder.endsWith("/")) {
			targetFolder += "/";
		}
		System.out.println("源目录:" + srcFolder);
		System.out.println("目标目录:" + targetFolder);

		File file = new File(srcFolder);
		int i = 0;
		Date start = new Date();
		if (file.exists()) {
			File[] files = file.listFiles();
			if (null != files) {
				for (File f : files) {
					if (f.isFile()) {
						System.out.println("正在转换文件:" + (++i) + "\t" + f.getAbsolutePath());
						compressImage(f.getAbsolutePath(), targetFolder + f.getName());
					}
				}
			}
		}
		long duration = (new Date()).getTime() - start.getTime();
		System.out.println("耗时:" + (duration) + "毫秒");
	}

	/**
	 * 压缩图片
	 * 
	 * @param srcPath
	 *            源文件路径
	 * @param toPath
	 *            目标文件路径
	 */
	public static void compressImage(String srcPath, String toPath) {

		try {
			// scale:调整图片尺寸,1 表示图片尺寸不变;
			// outputQuality:压缩图片文件质量,参数1为最高质量
			Thumbnails.of(srcPath).scale(1f).outputQuality(0.25f).toFile(toPath);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

执行日志

在这里插入图片描述

小结

实际应用中,可以通过调整输出质量参数(outputQuality),达到不同的压缩比与质量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值