图片与图片的合成

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

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

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 ;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值