【图片与图片的合成 代码】
/ * 首先 , 创建图片合成后存放的路径,判断如果没有文件夹,新建。* /
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 ;
}