【原由】这是我在实习时候写的程序,纯JAVA的!将来大家肯定能用到,在这里发出来分享,写的不好还希望能帮忙修改!
【功能】批量PNG图片透明合成
【注释】为了方便新手理解,我会和生活中绘画的逻辑结合说明,高手不要笑话我,嘿嘿!
【步骤和原理】
BufferedImage,这样才可以去画!
BufferedImage)上一样。
BufferedImage。
2、其次,确定我们把图片画在哪?当然我们还是要画在新的BufferedImage上,最后才去把它变成照片(File)。
BufferedImage.TYPE_4BYTE_ABGR是比较适合。
Graphics2D)。
4、新画纸希望哪支画笔在他上面画呢?当然是所有的,所以画纸找到了所有的画笔。
createGraphics();
drawImage画图了哦。
6、在最后就是把画纸上画照成照片(File),大功告成。
【用法】用户只要实例化一些图片对象(本例是批量实例化的),然后一参数的形式传给静态方法来合成图片即可!
【代码】说了这么多了,看一下我是怎么实现了哦!
图片
package image.merge;
public class Images {
private int x,y;
private String src;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public String getSrc() {
return src;
}
public void setSrc(String src) {
this.src = src;
}
Images(int x, int y, String src) {
this.x = x;
this.y = y;
this.src = src;
}
}
图片合成类
package image.merge;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class ImageMerge {
public static void mergeImg(Images imgobject[], String outsrc)
throws IOException {
try {
File imgfile[] = new File[imgobject.length];
BufferedImage imgbuffered[] = new BufferedImage[imgobject.length];
BufferedImage tag = new BufferedImage(400, 400,
BufferedImage.TYPE_4BYTE_ABGR_PRE);
Graphics2D g2d[] = new Graphics2D[imgobject.length];
for (int z = 0; z < imgobject.length; z++) {
imgfile[z] = new File(imgobject[z].getSrc());
System.out.println("读取第" + z + "个文件!");
imgbuffered[z] = ImageIO.read(imgfile[z]);
System.out.println("把第" + z + "个文件读取成buffered!");
g2d[z] = tag.createGraphics();
System.out.println("创建第" + z + "个画笔!");
g2d[z].drawImage(imgbuffered[z], imgobject[z].getX(),
imgobject[z].getY(), imgbuffered[z].getWidth(),
imgbuffered[z].getHeight(), null);
}
System.out.println("合成完毕,准备输出,请稍候~~~~~~");
ImageIO.write(tag, "png", new File(outsrc));
System.out.println("恭喜!!图片输出完毕!");
} catch (RuntimeException e) {
e.printStackTrace();
}
}
}
测试类
package image.merge;
import java.io.IOException;
public class MergeTest {
public static void main(String[] args) throws IOException {
Long star = System.currentTimeMillis();
String src[] = new String[5];//图片的本地路径
src[0] = "C:\\04.png";// 底边
src[1] = "C:\\05.png";// 正身
src[2] = "C:\\03.png";// 左袖子
src[3] = "C:\\02.png";// 右袖子
src[4] = "C:\\01.png";// 领子
int x[] = new int[5];// 存放X轴坐标的数组
x[0] = 110;
x[1] = 100;
x[2] = 65;
x[3] = 265;
x[4] = 140;
int y[] = new int[5];// 存放Y轴坐标的数组
y[0] = 325;
y[1] = 50;
y[2] = 65;
y[3] = 68;
y[4] = 40;
Images[] imgo = new Images[src.length];// 批量生成图片对象
for (int z = 0; z < imgo.length; z++) { // 构造方法测参数是X,Y轴的位置和图片本地路径
imgo[z] = new Images(x[z], y[z], src[z]);
}
ImageMerge.mergeImg(imgo, "C:\\out.png");// 合成图片的方法
Long end = System.currentTimeMillis();
System.out.println("图片合成耗时" + (end - star) + "毫秒");
}
}