批量将 svg 文件转成 png 文件

批量将 svg 文件转成 png 文件

1、导入依赖
        <!-- batik -->
        <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;

/**
 * 将 svg 转成 png
 */
public class BatikDemo {
    
    

    public static void main(String[] args) {
    
    
        // svg 文件所在路径
        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");
    }


	/**
	 *  来源:https://blog.csdn.net/rgbhi/article/details/110564262
	 */
    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();
        }
    }



    /**
     *  来源:https://blog.csdn.net/m0_47406832/article/details/120197446
     *
     * 获取指定文件夹下所有文件,不含文件夹
     *
     * @param dirFilePath 文件夹路径
     * @return
     */
    public static List<File> getAllFile(String dirFilePath) {
    
    
        if (StringUtils.isBlank(dirFilePath))
            return null;
        return getAllFile(new File(dirFilePath));
    }

    /**
     * 获取指定文件夹下所有文件,不含文件夹
     *
     * @param dirFile 文件夹
     * @return
     */
    public static List<File> getAllFile(File dirFile) {
    
    
        // 如果文件夹不存在或着不是文件夹,则返回 null
        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;
    }


}

猜你喜欢

转载自blog.csdn.net/weixin_51123079/article/details/127316024