实现两张图片的叠加
来源:互联网 发布:iphone丢了怎么办 知乎 编辑:程序博客网 时间:2024/04/28 07:31
看了好多网上的图片叠加,说的最多的就是水印效果,但是我需要做的是两张图片完全重合的叠加,但是我的情况有点特殊,一张图片是从远程生成的,一张图片是本地生成的,所以在读图片的时候方法不一样,今天终于完成了,废话不多说,上代码:
首先是一个根据url网络网络url函数:
public static BufferedImage RequestImage(String imageurl) throws IOException{
URL url = new URL(imageurl);
try {
InputStream inputStream=url.openStream();
BufferedImage bufferedImage=ImageIO.read(inputStream);
return bufferedImage;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
第二步是根据路径获取本地图片:
public BufferedImage getContourSurface(){
BufferedImage contourSurface = null;
String csImg =null;// obj.getString("imgUrl");
csImg = "//mapCache//1395916476971_0.png";
String csImgPath = getHttpRequest().getRealPath("/")+csImg;
try {
contourSurface = ImageIO.read(new FileInputStream(csImgPath));
} catch (IOException e) {
e.printStackTrace();
}
return contourSurface;
}
第三步是最关键的图片叠加
/**
* 图片叠加
* @param qualNum 图片质量 (0.25,0.5,0.75,1)最大值为1
* @return 布尔类型
*/
@GET
@Path("/getBaseMap")
@Produces("image/png")
public String generateCompositeImage() {
String CompositeImage = getHttpRequest().getRealPath("/")
+ "contourSurface.jpg";
BufferedImage bimage = this.getBaseMap();
BufferedImage bimage2 = this.getContourSurface();
Graphics2D g = bimage.createGraphics();
g.drawImage((Image) bimage2, 0, 0, null);
g.dispose();
FileOutputStream out = null;
try {
out = new FileOutputStream(CompositeImage);
} catch (FileNotFoundException e) {
e.printStackTrace();
} // 先用一个特定的输出文件名
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bimage);
param.setQuality(1, true);
try {
encoder.encode(bimage, param);
} catch (ImageFormatException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
OutputStream os = getHttpResponse().getOutputStream();
BufferedImage cs = ImageIO.read(new File(CompositeImage));
ImageIO.write(cs, "png", os);
os.flush();
os.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
//由于需要首先把图片生成本地图片才可以出图,如果不生成本地图片会报io异常:can't read input file,没办法,只能随后手动删除了
File file = new File(CompositeImage);
file.delete();
return null;
效果图如下:(底图是ArcGIS服务的底图,上面是一张透明图片)
}
考虑到不想先生成本地图片,再删除,怕释放不了内存,所以又修改了一下代码,更精简了,主要是修改了叠加图片的函数,代码如下:
public String generateCompositeImage() {
BufferedImage baseMap = this.getBaseMap();
BufferedImage contourSurface = this.getContourSurface();
Graphics2D g = baseMap.createGraphics();
g.drawImage((Image) baseMap, 0, 0, null);
g.drawImage((Image) contourSurface, 0, 0, null);
g.dispose();
try {
OutputStream os = getHttpResponse().getOutputStream();
ImageIO.write(baseMap, "png", os);
ImageIO.write(contourSurface, "png", os);
os.flush();
os.close();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
- 实现两张图片的叠加
- 两张图片的叠加
- 两张图片进行叠加
- 两张yuv图片叠加
- 两个div叠加(两张图片叠加)
- 两个div叠加(两张图片叠加)
- OpenCV两张图片叠加,一张旋转一定的角度,另一张不变,如何叠加?
- cv::Mat两张图片的叠加方法
- ios合并两张图片(叠加两张图片 重合两张图片)
- Android进阶篇之RoundProgress(圆形进度条)使用两张图片叠加实现
- 两张图片叠加成一张图片后使用
- PHP合并两张图片的实现
- Html和css 两张图片叠加一起
- Html和css 两张图片叠加一起
- Html和css 两张图片叠加一起
- Html和css 两张图片叠加一起
- 使用h5的canvas实现两张图片的合并
- 叠加两种图片的方法
- 搭建windows下openfire调试环境
- Oracle Golden Gate 系列五 -- GG 使用配置 说明
- easyui combobox 多选的时候 获取值
- block循环引用
- PageRank迭代求解方法
- 实现两张图片的叠加
- An Efficient Way to Draw Approximate Circles in OpenGL
- 编译存储过程时一直遇到未响应 ORA-04021: 等待锁定对象 时发生超时
- Ubuntu设置root用户ssh登陆
- Hibernate的实体类注解详解
- Json解析工具Jackson(使用注解)
- hdu1789
- LeetCode 103 Binary Tree Zigzag Level Order Traversal
- 小鸟