`
aben328
  • 浏览: 1451633 次
  • 性别: Icon_minigender_1
  • 来自: 广东
社区版块
存档分类

转 Java实现批量PNG图片透明合成2009-06-02分类:学习java

    博客分类:
  • java
阅读更多

转 Java实现批量PNG图片透明合成

2009-06-02

分类:学习java


版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://deweixu.blogbus.com/logs/40349649.html

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

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

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

【步骤和原理】

      1、首先,确定我们要画什么图片,所以先File一下,在把它读取BufferedImage,这样才可以去画!

           就像我们有几张不同的照片(File),把它们画到一张画纸(BufferedImage)上一样。

           画纸有更多的操作,而照片则没有,所以我们要用BufferedImage

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

           就像要去选取画纸一样,我们要求背景透明,所以BufferedImage.TYPE_4BYTE_ABGR是比较适合。

      3、然后我们需要为每张图片准备一个画笔(Graphics2D)。

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

           画笔=画纸.createGraphics()

      5、每个画笔根据自己得到的信息(原图,坐标,大小等等)调用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) + "毫秒"
);
     }

}

分享到:
评论

相关推荐

    java:将html生成图片的所有方法比较

    java:html生成图片,所有生成方法的优缺点。

    JAVA上百实例源码以及开源项目源代码

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    JAVA上百实例源码以及开源项目

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    java开源包4

    Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP...

    java开源包5

    Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP...

    java开源包10

    Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP...

    java开源包1

    Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP...

    java开源包3

    Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP...

    java开源包101

    Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP...

    java开源包11

    Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP...

    java开源包6

    Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP...

    java开源包9

    Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP...

    java开源包8

    Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP...

    java开源包2

    Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP...

    java开源包7

    Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP...

    Java资源包01

    Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP...

    轻松水印7.0.3 完美破解版.rar

    通过它,我们可以快速、准确、方便、批量添加独特标识到图片上。 加注水印后的数码照片、产品展示图片可以最大限度防止盗用,同时也起到标识图片的功能。 《轻松水印》具有以下诸多特色: 软件的选项、操作简单...

    JAVA的图象操作工具Version1.0

    本软件集成了合成GIF图片,分解GIF图片,单个/批量图片加水印,单个/批量图片缩小,单个图片的切割等功能,如果觉得好用,请告诉我们,我们会为我们的产品给您带去方便感到欣慰!

Global site tag (gtag.js) - Google Analytics