大学生
 
- 金币
- 142
- 好评
- 0
- 信誉
- 100
|
发表于
2025-9-30 15:49:15
来自手机
|
显示全部楼层
来自 福建
import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriter;
import javax.imageio.stream.ImageOutputStream;
import java.awt.image.BufferedImage;
import java.io.*;
import java.nio.file.*;
import java.util.*;
import java.util.stream.Collectors;
/**
* 在每 2 张原图之间插入一张指定图片
* 用法: java InsertEvery2 <原图目录> <插入图路径> <输出目录>
*/
public class InsertEvery2 {
public static void main(String[] args) throws Exception {
if (args.length != 3) {
System.err.println("用法: java InsertEvery2 <原图目录> <插入图路径> <输出目录>");
System.exit(1);
}
Path srcDir = Paths.get(args[0]);
Path insert = Paths.get(args[1]);
Path outDir = Paths.get(args[2]);
if (!Files.isDirectory(srcDir)) throw new IllegalArgumentException("原图目录不存在");
if (!Files.isRegularFile(insert))throw new IllegalArgumentException("插入图文件不存在");
Files.createDirectories(outDir);
// 1. 列出所有 jpg/JPG,按文件名排序
List<Path> srcImgs = Files.list(srcDir)
.filter(p -> p.getFileName().toString()
.matches("(?i).+\\.jpe?g$"))
.sorted(Comparator.comparing(p -> p.getFileName().toString()))
.collect(Collectors.toList());
if (srcImgs.isEmpty()) {
System.out.println("原图目录下无 JPG 文件,程序结束");
return;
}
// 2. 读入插入图(只读一次)
BufferedImage insertImg = ImageIO.read(insert.toFile());
// 3. 处理并写出
int index = 0; // 新文件序号,从 0 开始
for (int i = 0; i < srcImgs.size(); i++) {
// 先写原图
Path src = srcImgs.get(i);
BufferedImage bi = ImageIO.read(src.toFile());
writeJpg(bi, outDir.resolve(String.format("%04d.jpg", index++)));
// 每 2 张原图之后写一次插入图
if ((i + 1) % 2 == 0) {
writeJpg(insertImg, outDir.resolve(String.format("%04d.jpg", index++)));
}
}
System.out.println("处理完成,共生成 " + index + " 张图片到 " + outDir.toAbsolutePath());
}
/** 用 JDK 自带 ImageIO 写 JPG,质量 0.95 */
private static void writeJpg(BufferedImage img, Path target) throws IOException {
try (ImageOutputStream ios = ImageIO.createImageOutputStream(target.toFile())) {
ImageWriter writer = ImageIO.getImageWritersByFormatName("jpg").next();
writer.setOutput(ios);
writer.write(null, new IIOImage(img, null, null), writer.getDefaultWriteParam());
writer.dispose();
}
}
} |
|