java 图片流 拼接_java 实现图片拼接

importjavax.imageio.ImageIO;importjava.awt.image.BufferedImage;importjava.io.File;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;/*** @Author : guoyanan

* @Title : 处理图片的拼接工具类

* @Time : 2019/02/11 10:47

* @Document :*/

public classImageHandle {/*** 图片拼接图片必须长宽一致

*@paramfiles 需要拼接的图片类型

*@paramtype 1-横向拼接,2-纵向拼接

*@paramtargetFile 目标文件名称*/

public static boolean mergeImage(File[] files, inttype ,String targetFile){int len =files.length;if(len<1){throw new RuntimeException("图片数量为0,不可以执行拼接");

}//File[] src = new File[len];

BufferedImage[] images = newBufferedImage[len];int[][] ImageArrays = new int[len][];for (int i = 0 ; i < len ; i++){try{//src[i] = new File(files[i]);

images[i] =ImageIO.read(files[i]);

}catch(Exception e){

e.printStackTrace();

}int width =images[i].getWidth();int height =images[i].getHeight();

ImageArrays[i]= new int[width *height];

ImageArrays[i]= images[i].getRGB(0,0,width,height,ImageArrays[i],0,width);

}int newHeight = 0;int newWidth = 0;for(int i = 0; i < images.length;i++){//横向

if(type == 1){

newHeight= newHeight > images[i].getHeight() ?newWidth : images[i].getHeight();

// 错误代码,原先没有添加+ 号

newWidth +=images[i].getWidth();

}else if (type == 2){//纵向

newWidth = newHeight > images[i].getWidth() ?newWidth : images[i].getWidth();

newHeight+=images[i].getHeight();

}

}if(type == 1 && newWidth < 1){return false;

}if(type == 2 && newHeight < 1){return false;

}try{

BufferedImage ImageNew= newBufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);int height_i = 0;int width_i = 0;for (int i = 0; i < images.length; i++){if(type == 1){

ImageNew.setRGB(width_i,0, images[i].getWidth(), newHeight, ImageArrays[i], 0, images[i].getWidth());

width_i+=images[i].getWidth();

}else if (type == 2){

ImageNew.setRGB(0, height_i, newWidth, images[i].getHeight(), ImageArrays[i], 0, newWidth);

height_i+=images[i].getHeight();

}

}//输出想要的图片

ImageIO.write(ImageNew,targetFile.split("\\.")[1], newFile(targetFile));return true;

}catch(Exception e){

e.printStackTrace();return false;

}

}public static voidmain(String[] args){//String[] files = {"F:\\tmp\\OK.jpg","F:\\tmp\\OK.jpg","F:\\tmp\\OK.jpg","F:\\tmp\\OK.jpg","F:\\tmp\\OK.jpg"};//mergeImage(files,2,"F:\\OK.jpg");

List> lists = new ArrayList>();

Map map1 = new HashMap<>();

map1.put("id","1");

map1.put("cpid","0");

map1.put("text","One Level");

Map map2 = new HashMap<>();

map2.put("id","2");

map2.put("cpid","1");

map2.put("text","Two Level");

Map map3 = new HashMap<>();

map3.put("id","3");

map3.put("cpid","2");

map3.put("text","Three Level");

lists.add(map1);

lists.add(map2);

lists.add(map3);

List> listUp = new ArrayList>();

List> listTemp = new ArrayList>();for (int i= 0; i < lists.size();i++){

Map map =lists.get(i);if(map.get("cpid")=="0"){

listUp.add(map);

lists.remove(i);

System.out.println(map.get("text"));

}

}

ItentorMap(listUp,lists,listTemp);

}private static void ItentorMap(List> listUp,List> listDown,List>listTemp){

System.out.println("listUp:"+System.identityHashCode(listUp));

System.out.println("listTemp:"+System.identityHashCode(listTemp));

listTemp.clear();for (int i=0; i

Map map =listUp.get(i);for(int j = 0; j < listDown.size(); j++){

Map mapj =listDown.get(j);if(map.get("id")==mapj.get("cpid")){

listTemp.add(mapj);

listDown.remove(j);

System.out.println(mapj.get("text"));

}

}

}

listUp.clear();//必须这样写,如果写成listUp=listTemp,会导致2个list集合的内存地址一样。

for (int i = 0;i

listUp.add(listTemp.get(i));

}

System.out.println("listUp:"+System.identityHashCode(listUp));

System.out.println("listTemp:"+System.identityHashCode(listTemp));if(listDown.size()>0) {

ItentorMap(listUp, listDown, listTemp);

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值