/** * 图片拼接 * @param files 要拼接的文件列表 * @param type 1 横向拼接, 2 纵向拼接 * @return */ public static InputStream merge(String[] files, int type) { int len = files.length; if (len < 1) { log.info("图片数量小于1"); return null; } File[] src = new File[len]; BufferedImage[] images = new BufferedImage[len]; int[][] ImageArrays = new int[len][]; for (int i = 0; i < len; i++) { try { src[i] = new File(files[i]); images[i] = ImageIO.read(src[i]); } catch (Exception e) { e.printStackTrace(); return null; } int width = images[i].getWidth(); int height = images[i].getHeight(); ImageArrays[i] = new int[width * height];// 从图片中读取RGB 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() ? newHeight : images[i].getHeight(); newWidth += images[i].getWidth(); }else if(type == 2){//纵向 newWidth = newWidth > images[i].getWidth() ? newWidth : images[i].getWidth(); newHeight += images[i].getHeight(); } } log.info("拼接后图像宽度:"+newWidth); log.info("拼接后图像高度:"+newHeight); if (type == 1 && newWidth < 1) { log.info("拼接后图像宽度小于1"); return null; } if (type == 2 && newHeight < 1) { log.info("拼接后图像高度小于1"); return null; } //生成新图片 try { BufferedImage ImageNew = new BufferedImage(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(); } } // File outFile = new File("d://123.jpg"); // ImageIO.write(ImageNew, "jpg", outFile);// 写图片 ByteArrayOutputStream out = new ByteArrayOutputStream(); ImageIO.write(ImageNew, "jpg", out);// 图片写入到输出流中 ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); return in; } catch (Exception e) { e.printStackTrace(); return null; } }
Java图像拼接处理
猜你喜欢
转载自chenyunhong.iteye.com/blog/2226987
今日推荐
周排行