批量将 svg 文件转成 png 文件
1、导入依赖
<dependency>
<groupId>batik</groupId>
<artifactId>batik-transcoder</artifactId>
<version>1.6-1</version>
</dependency>
2、代码
package com.example.demo;
import org.apache.batik.transcoder.Transcoder;
import org.apache.batik.transcoder.TranscoderException;
import org.apache.batik.transcoder.TranscoderInput;
import org.apache.batik.transcoder.TranscoderOutput;
import org.apache.batik.transcoder.image.PNGTranscoder;
import org.apache.commons.lang.StringUtils;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
public class BatikDemo {
public static void main(String[] args) {
String path = "D:\\Project\\WeChat\\GitHub\\GBlog-wx\\miniprogram\\images\\icon";
List<File> allFile = getAllFile(path);
if (allFile == null) {
return;
}
allFile.forEach((file) -> {
String absolutePath = file.getAbsolutePath();
String filePath = absolutePath.replace(".svg", ".png");
File pngFile = new File(filePath);
try {
convertSvg2Png(file, pngFile);
} catch (Exception e) {
e.printStackTrace();
}
});
System.out.println("end");
}
public static void convertSvg2Png(File svg, File png) throws IOException, TranscoderException {
InputStream in = new FileInputStream(svg);
OutputStream out = new FileOutputStream(png);
out = new BufferedOutputStream(out);
Transcoder transcoder = new PNGTranscoder();
try {
TranscoderInput input = new TranscoderInput(in);
try {
TranscoderOutput output = new TranscoderOutput(out);
transcoder.transcode(input, output);
} finally {
out.close();
}
} finally {
in.close();
}
}
public static List<File> getAllFile(String dirFilePath) {
if (StringUtils.isBlank(dirFilePath))
return null;
return getAllFile(new File(dirFilePath));
}
public static List<File> getAllFile(File dirFile) {
if (Objects.isNull(dirFile) || !dirFile.exists() || dirFile.isFile())
return null;
File[] childrenFiles = dirFile.listFiles();
if (Objects.isNull(childrenFiles) || childrenFiles.length == 0)
return null;
List<File> files = new ArrayList<>();
for (File childFile : childrenFiles) {
if (childFile.isFile()) {
files.add(childFile);
} else {
List<File> cFiles = getAllFile(childFile);
if (Objects.isNull(cFiles) || cFiles.isEmpty()) continue;
files.addAll(cFiles);
}
}
return files;
}
}