【原由】这是我在实习时候写的程序,纯JAVA的!将来大家肯定能用到,在这里发出来分享,写的不好还希望能帮忙修改!

【功能】批量PNG图片透明合成

【注释】为了方便新手理解,我会和生活中绘画的逻辑结合说明,高手不要笑话我,嘿嘿!

【步骤和原理】

BufferedImage,这样才可以去画!

BufferedImage)上一样。

BufferedImage。

     2、其次,确定我们把图片画在哪?当然我们还是要画在新的BufferedImage上,最后才去把它变成照片(File)。

BufferedImage.TYPE_4BYTE_ABGR是比较适合。

Graphics2D)。

     4、新画纸希望哪支画笔在他上面画呢?当然是所有的,所以画纸找到了所有的画笔。

createGraphics();

drawImage画图了哦。

     6、在最后就是把画纸上画照成照片(File),大功告成。

【用法】用户只要实例化一些图片对象(本例是批量实例化的),然后一参数的形式传给静态方法来合成图片即可!

【代码】说了这么多了,看一下我是怎么实现了哦!

JAVA 太大 生成的PNG java生成png图片_实现JAVA 太大 生成的PNG java生成png图片_JAVA 太大 生成的PNG_02图片

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;

    }


}

 


JAVA 太大 生成的PNG java生成png图片_实现JAVA 太大 生成的PNG java生成png图片_JAVA 太大 生成的PNG_02图片合成类

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();

        }

    }

}

 

JAVA 太大 生成的PNG java生成png图片_实现JAVA 太大 生成的PNG java生成png图片_JAVA 太大 生成的PNG_02测试类

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) + "毫秒");

    }


}