图片尺寸的修改(Java)
最近在写一个小项目,里面要用到一些小图标,但是阿里矢量图上面的图标尺寸,有一点大,需要等比例缩小一下尺寸,而且文件有点多,要批量操作,就写一个工具类操作一下,这里要引入一个依赖
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.8</version>
</dependency>
然后具体的流程就是,先确定要扫描的文件夹,然后获取到所有的文件名,改变图片尺寸,并且保存到目标路径
package com.mingke.zzuli;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import net.coobird.thumbnailator.Thumbnails;
public class Main {
static String IMAGE_PATH = "D:\\apexmic\\标签打印\\图标";
public static void main(String[] args) throws IOException {
//创建出来的文件,存储到目标文件夹
String destPath = IMAGE_PATH + "\\target";
File folder = new File(destPath);
//判断文件夹是否存在,如果不存在,就创建
if(!folder.exists()) {
folder.mkdir();
System.out.println("create");
}else {
System.out.println("already");
}
String patten = ".*\\.png";
int newWidth = 64;
int newHeight = 64;
List<String> result = getAllFile(IMAGE_PATH, true);
for(String item : result) {
if(item.matches(patten)) {
System.out.println("source "+item);
//创建文件,获取到文件名,用来拼装目标文件路径
File itemFile = new File(item);
if(itemFile.exists() && itemFile.isFile()) {
String dest = destPath + "\\" + itemFile.getName();
//改变图片尺寸
resizeImage(item, dest, newWidth, newHeight, true);
System.out.println(itemFile.getName()+" is already success");
}
}
}
}
/**
* 获取路径下的所有文件/文件夹
* @param directoryPath 需要遍历的文件夹路径
* @param isAddDirectory 是否将子文件夹的路径也添加到list集合中
* @return
*/
public static List<String> getAllFile(String directoryPath,boolean isAddDirectory) {
List<String> list = new ArrayList<String>();
File baseFile = new File(directoryPath);
if (baseFile.isFile() || !baseFile.exists()) {
return list;
}
File[] files = baseFile.listFiles();
for (File file : files) {
if (file.isDirectory()) {
if(isAddDirectory){
list.add(file.getAbsolutePath());
}
list.addAll(getAllFile(file.getAbsolutePath(),isAddDirectory));
} else {
list.add(file.getAbsolutePath());
}
}
return list;
}
/**
* 重新生成图片宽、高
* @param srcPath 图片路径
* @param destPath 新生成的图片路径
* @param newWith 新的宽度
* @param newHeight 新的高度
* @param forceSize 是否强制使用指定宽、高,false:会保持原图片宽高比例约束
* @return
* @throws IOException
*/
public static boolean resizeImage(String srcPath, String destPath, int newWith, int newHeight, boolean forceSize) throws IOException {
if (forceSize) {
Thumbnails.of(srcPath).forceSize(newWith, newHeight).toFile(destPath);
} else {
Thumbnails.of(srcPath).width(newWith).height(newHeight).toFile(destPath);
}
return true;
}
}