`
aben328
  • 浏览: 1460562 次
  • 性别: 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生成图片的所有方法比较

    1. **Java2DPDF库转图片** - 优点:通过先将HTML渲染为PDF,然后将PDF转换为图像,这种方式可以保持较好的排版和字体效果,适合复杂的HTML结构。 - 缺点:转换过程可能较慢,且对某些CSS样式支持不全。需要额外...

    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开源包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资源包01

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

    java开源包2

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

    java开源包11

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

    java开源包7

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

    ImageMagick-6.3.9-0-Q16-windows-dll

    1. **水印添加**:在图片的指定位置添加文字或图像水印,可以调整透明度、角度、大小等属性。 2. **图像调整**:改变亮度、对比度、饱和度,或者应用色调和色彩平衡效果。 3. **尺寸调整**:无损缩放或裁剪图片,...

    Linux的_ImageMagic图片转换.pdf

    ImageMagick提供了命令行接口,方便用户通过脚本实现批量处理图片的任务。使用ImageMagick,开发者可以编写C/C++、Perl、Java、PHP、Python、Ruby等多种语言的程序来利用其功能。 ImageMagick支持多种图像格式的...

    JAVA的图象操作工具Version1.0

    "JAVA的图象操作工具Version1.0"是一款基于Java语言开发的图像处理软件,它提供了一系列实用的功能,如合成GIF动图、分解GIF动图、添加水印、批量缩放以及图片切割。下面我们将详细探讨这些功能及其背后的Java图形...

    ImageMagick-7.0.2-4-Q16-x64-static.rar

    4. 脚本支持:支持使用Perl、Python、Ruby等脚本语言与ImageMagick进行交互,实现自动化批量处理。 5. 图像分析:测量、识别和检测图像特征,如颜色分布、形状、纹理等。 6. 并行处理:利用多核处理器的Q16配置,...

    GraphicsMagick图片截取软件全套及相应的demo.rar

    GraphicsMagick是一款强大的开源图像处理工具,它支持多种图片格式,并提供了丰富的命令行接口来执行各种图像操作,如转换、裁剪、缩放、旋转、颜色调整等。在这个"GraphicsMagick图片截取软件全套及相应的demo.rar...

    Java生成验证码(包含gif动画验证码)

    尽管具体实现细节未在描述中给出,但我们可以推断它应该包含了创建多帧验证码图片并合成GIF的功能,可能还提供了自定义配置项,如字符集、帧数、延迟时间等。 在实际应用中,开发者需要根据项目需求调整验证码的...

Global site tag (gtag.js) - Google Analytics