Java Image合并

来源:互联网 发布:连城诀 知乎 编辑:程序博客网 时间:2024/06/05 20:22
import java.awt.Image;import java.awt.image.BufferedImage;import java.io.File;import javax.imageio.ImageIO;import org.junit.Test;public class MergeImageUtils {/** * 将两张图片合并为一张图片 * @param oneSrc * @param twoSrc * @param mergeSrc 合并后的图片路径 */public void mergeImage(String oneSrc, String twoSrc, String mergeSrc) {String postFix = mergeSrc.substring(mergeSrc.lastIndexOf(".") + 1, mergeSrc.length());try {File fileOne = new File(oneSrc);//读取第一张图片Image src = ImageIO.read(fileOne);  int width = src.getWidth(null);int height = src.getHeight(null);if(width > 900 || height > 900) {int num = (int) Math.ceil((double)width/900);int num2 = (int) Math.ceil((double)height/900);num = num > num2 ? num : num2;width = width/num;height = height/num;}        BufferedImage bufferedImageOne = null;if ("png".equalsIgnoreCase(postFix.toLowerCase())) {bufferedImageOne = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR);} else {bufferedImageOne = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);}bufferedImageOne.getGraphics().drawImage(src.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0,  null);int[] imageArrayOne = new int[width * height];// 从图片中读取RGBimageArrayOne = bufferedImageOne.getRGB(0, 0, width, height, imageArrayOne, 0, width);File fileTwo = new File(twoSrc);//读取第二张图片src = ImageIO.read(fileTwo);  BufferedImage bufferedImageTwo = null;if ("png".equalsIgnoreCase(postFix.toLowerCase())) {bufferedImageTwo = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR);} else {bufferedImageTwo = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);}bufferedImageTwo.getGraphics().drawImage(src.getScaledInstance(width, height,  Image.SCALE_SMOOTH), 0, 0,  null);int[] imageArrayTwo = new int[width * height];// 从图片中读取RGBimageArrayTwo = bufferedImageTwo.getRGB(0, 0, width, height, imageArrayTwo, 0, width);//生成新图片BufferedImage imageNew = new BufferedImage(width*2, height, BufferedImage.TYPE_INT_RGB);imageNew.setRGB(0 , 0, width, height, imageArrayOne, 0, width);//设置左半部分的RGBimageNew.setRGB(width, 0, width, height, imageArrayTwo, 0, width);//设置右半部分的RGBFile outFile = new File(mergeSrc);//写图片ImageIO.write(imageNew, postFix, outFile);} catch (Exception e) {e.printStackTrace();}}    @Test    public void testMergeImage(){    mergeImage("D:/source/image/1.jpg", "D:/source/image/2.png", "D:/source/image/3.png");}}

0 0
原创粉丝点击