给客户做了两张报表,导出两张图片,但是客户非要导出到一张图片,然后就用java把两张图片合成一张了。

package com.zws;import java.awt.Graphics;import java.awt.p_w_picpath.BufferedImage;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import javax.p_w_picpathio.ImageIO;public class ImageConcat {	public static void main(String[] args) throws IOException {		String img0 = "G:/0.png";		String img1 = "G:/1.png";		String savePath = "G:/concat1.png";		concat(img0, img1, savePath, "png", 0);		//concat(img0, img1, savePath, null, 1);	}		/**	 * 	 * @param img0			图片一路径	 * @param img1			图片二路径	 * @param savePath		图片保存路径	 * @param formateName	合成图片格式	 * @param conType		合成类型,0:左右拼接,1:上下拼接	 * @throws IOException		 */	public static void concat(String img0, String img1, String savePath, String formateName, int conType) 			throws IOException {		InputStream in0 = new FileInputStream(img0);		InputStream in1 = new FileInputStream(img1);				byte[] byts = concat(in0, in1, formateName, conType);				FileOutputStream out = new FileOutputStream(savePath);		out.write(byts);		out.close();	}		/**	 * 	 * @param byts0			图片一	 * @param byts1			图片二	 * @param savePath		图片保存路径	 * @param formateName	合成图片格式	 * @param conType		合成类型,0:左右拼接,1:上下拼接	 * @throws IOException		 */	public static void concat(byte[] byts0, byte[] byts1, String savePath, String formateName, int conType) 			throws IOException {		InputStream in0 = new ByteArrayInputStream(byts0);		InputStream in1 = new ByteArrayInputStream(byts1);				byte[] byts = concat(in0, in1, formateName, conType);				FileOutputStream out = new FileOutputStream(savePath);		out.write(byts);		out.close();	}	/**	 * 	 * @param in0 			图片一	 * @param in1			图片二	 * @param formateName	合成图片格式	 * @param conType		合成类型,0:左右拼接,1:上下拼接	 * @throws IOException	 */	public static byte[] concat(InputStream in0, InputStream in1, String formateName, int conType) 			throws IOException {				BufferedImage bi0 = ImageIO.read(in0);		BufferedImage bi1 = ImageIO.read(in1);				int width = 0, height = 0;		if (conType == 0) { //左右拼接			width = bi0.getWidth() + bi1.getWidth();			height = bi0.getHeight() >= bi1.getHeight() ? bi0.getHeight() : bi1.getHeight();		} else {			//上下拼接			width = bi0.getWidth() >= bi1.getWidth() ? bi0.getWidth() : bi1.getWidth();			height = bi0.getHeight() + bi1.getHeight();		}		BufferedImage conc = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);				int x0 = 0, y0 = 0, widthX0 = bi0.getWidth(), heightY0 = bi0.getHeight();		int x1 = 0, y1 = 0, widthX1 = bi1.getWidth(), heightY1 = bi1.getHeight();		if (conType == 0) {			x1 = bi0.getWidth();			y1 = 0;		} else {			x1 = 0;			y1 = bi0.getHeight();		}		Graphics graphics = conc.createGraphics();		graphics.drawImage(bi0, x0, y0, widthX0, heightY0, null);		graphics.drawImage(bi1, x1, y1, widthX1, heightY1, null);				ByteArrayOutputStream output = new ByteArrayOutputStream();		ImageIO.write(conc, formateName, output);				output.close();		in0.close();		in1.close();				return output.toByteArray();	}}

  如果两张图片尺寸相同的话合成是比较完美的,但是如果尺寸不同就会有空白。