以下代码可直接使用,欢迎大家一起交流。
package com.util;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import com.alibaba.fastjson.JSON;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
/**
* 说明:
* 如果想直接使用,文件的命名需以李xxx-4xxxx-0.png格式,也可以自己定义并修改代码。
* @author lvgb
*
*/
public class ImageTest {
/**
* 合成前图片存放目录
*/
private static final String SOURCE = "D:\\test\\999\\";
/**
* 合成后图片存放目录
*/
private static final String TARGET = "D:\\test\\888\\";
public ImageTest() {
}
public static void main(String[] args) {
try {
File[] files = new File(SOURCE).listFiles();
Set<String> successSet = new HashSet<String>();
Set<String> failSet = new HashSet<String>();
// 先清空目标文件夹里面的内容
//FileUtils.cleanDirectory(new File(TARGET));
//将相同图片的名称存入集合
for (File file : files) {
String fileName = file.getName();
String name = fileName.substring(0, fileName.lastIndexOf("-"));
successSet.add(name);
}
//遍历集合,将需要合成的图片存入list
for (String next : successSet) {
try {
List<String> list = new ArrayList<String>();
int sum = 0;
System.out.println(next);
for (int i = 0;i<files.length ; i++) {
String fileName = files[i].getName();
String names = fileName.substring(0, fileName.lastIndexOf("-"));
if(next.equals(names)){
list.add(SOURCE + next + "-" + sum + ".png");
sum ++;
}
}
//调用方法生成图片
imageJion(list,TARGET + next + ".png");
} catch (Exception e) {
e.printStackTrace();
failSet.add(next);
}
}
if(failSet.size() > 0){
System.out.println("失败------" + JSON.toJSONString(failSet));
}else {
System.out.println("全部成功--------------");
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 图片合成
* list 传图片全路径
* @throws Exception
*/
public static void imageJion(List<String> list,String outPath) throws Exception {
int width = 0;
int totalHeight = 0;
for (int i = 0; i < list.size(); i++) {
File _file1 = new File(list.get(i));
Image src1 = javax.imageio.ImageIO.read(_file1);
// 获取图片的宽度
if (i == 0) {
width = src1.getWidth(null);
}
// 将图片的高度相加
totalHeight = totalHeight + src1.getHeight(null);
}
// 构造一个类型为预定义图像类型之一的 BufferedImage。 宽度为第一只的宽度,高度为各个图片高度之和
BufferedImage tag = new BufferedImage(width, totalHeight, BufferedImage.TYPE_INT_RGB);
// 绘制合成图像
Graphics g = tag.createGraphics();
int heightThree = 0;
for (int i = 0; i < list.size(); i++) {
File _file1 = new File(list.get(i));
Image src1 = javax.imageio.ImageIO.read(_file1);
int height = src1.getHeight(null);
// 绘制合成图像
if (i == 0) {
heightThree = height;
g.drawImage(src1, 0, 0, width, height, null);
} else {
g.drawImage(src1, 0, heightThree, width, height, null);
heightThree = heightThree + height;
}
}
// 释放此图形的上下文以及它使用的所有系统资源。
g.dispose();
// 创建输出流
FileOutputStream out = new FileOutputStream(outPath);
// 将绘制的图像生成至输出流
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(tag);
// 关闭输出流
out.close();
System.out.println(outPath + "成功------");
}
}