图片与图片的合成

【图片与图片的合成 代码】

/ * 首先 , 创建图片合成后存放的路径,判断如果没有文件夹,新建。* /

String finalCompositePicPath = SavePath + File.separator + card_id + ".jpg"; //比如:c:/temp/312.jpg
  
  File cardFile = new File(finalCompositePicPath);
   try
   {
    if (null != cardFile && !cardFile.isDirectory()) // 目录不存在,则创建它
    {
     cardFile.createNewFile();
    }
    else if (cardFile.exists()) // 存在则先删除     
    {
     cardFile.delete();
     cardFile.createNewFile(); // 重新创建       
    }  
   }
   catch (IOException ex)
   {
    SysLog.getModuleLogger().info("合成部分--->创建文件出错");
    SysLog.getModuleLogger().error(ex,ex);
   }


/ * 接下来是调用图片合成的代码 * /

compositeOnePicByTwo(backgroundPicPath,headPicPath,finalCompositePicPath,position) //需要调用的函数    

参数解释:   backgroundPicPath (完整路径)背景图片如 c:/temp/背景.jpg

                      headPicPath      (完整路径)小图片如 c:/temp/小图.jpg

                     finalCompositePicPath (完整路径)合成目标图片如 c:/temp/312.jpg

                     position 小图在背景图的位置 此处1为左边,2为右边 可任意自己调整

/ * 合成图片的方法 * /

public boolean compositeOnePicByTwo(String backgroundPicPath,String headPicPath,String finalCompositePicPath,String positionType) 
{
   SysLog.getModuleLogger().info("存入card的backgroundPicPath完整路径: " + backgroundPicPath );
   SysLog.getModuleLogger().info("存入card的headPicPath完整路径: " + headPicPath );
   SysLog.getModuleLogger().info("compositeOnePicByTwo(图片与图片的合成)----->Start");
   int x = 0;
   int y = 0;
   BufferedImage bi1 = null;
   BufferedImage bi2 = null;
   try
   {
    bi1 = javax.imageio.ImageIO.read(new File(backgroundPicPath));
    bi2 = javax.imageio.ImageIO.read(new File(headPicPath));
   }
   catch (IOException e)
   {
    SysLog.getModuleLogger().info("compositeOnePicByTwo(图片与图片的合成)----->ERROR(创建内存图片出错)");
    e.printStackTrace();
    return false ; 
   }
  
   Graphics g = bi1.getGraphics();
   if(positionType.equals("1")) // (1)小图片在大图片的左
   {
    g.drawImage(bi2, x+30, bi1.getHeight()/2-bi2.getHeight()/2, null); 
   }
   else if(positionType.equals("2")) // (2) 小图片在大图片的右   
   {
    g.drawImage(bi2,bi1.getWidth() - bi2.getWidth()-30 ,bi1.getHeight()/2-bi2.getHeight()/2,null); 
   }

   FileOutputStream out = null; //输出到文件流
   SysLog.getModuleLogger().info("存入card的完整路径: " + finalCompositePicPath );
   try
   {
    out = new FileOutputStream(finalCompositePicPath);
    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
    JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi1);
    param.setQuality(1f,false);
    encoder.setJPEGEncodeParam(param);
    encoder.encode(bi1);
    out.close();
   }
   catch (IOException e)
   {
    SysLog.getModuleLogger().info("compositeOnePicByTwo(图片与图片的合成)----->ERROR(输出出错)");
    e.printStackTrace();
    return false ; 
   }
  
   //   p1背景图,p2印章,p为输出图。p2要是gif或png等支持透明图象的。
   //
   //   x,y 为在背景图放置印章的坐标( 左上角开始算)。
   //
   //
   //   在Java2D中设置画图的透明度:
  
   float alpha = 0.5f; // 透明度
   Graphics2D g2d = bi2.createGraphics();
  
   // 设置透明
   g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,alpha)); // 开始
   // g2d.drawImage(); // 画图
   g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER)); // 结束
  
   return true ; 
}

你可能感兴趣的:(java,jpg)