本文共 2641 字,大约阅读时间需要 8 分钟。
import java.awt.Image; 2.import java.awt.image.BufferedImage; 3.import java.io.File; 4.import javax.imageio.ImageIO; 5.import org.junit.Test; 6. 7.public class MergeImageUtils { 8. 9. /** 10. * 将两张图片合并为一张图片 11. * @param oneSrc 12. * @param twoSrc 13. * @param mergeSrc 合并后的图片路径 14. */ 15. public void mergeImage(String oneSrc, String twoSrc, String mergeSrc) { 16. String postFix = mergeSrc.substring(mergeSrc.lastIndexOf(".") + 1, mergeSrc.length()); 17. try { 18. File fileOne = new File(oneSrc);//读取第一张图片 19. Image src = ImageIO.read(fileOne); 20. int width = src.getWidth(null); 21. int height = src.getHeight(null); 22. if(width > 900 || height > 900) { 23. int num = (int) Math.ceil((double)width/900); 24. int num2 = (int) Math.ceil((double)height/900); 25. num = num > num2 ? num : num2; 26. width = width/num; 27. height = height/num; 28. } 29. BufferedImage bufferedImageOne = null; 30. if ("png".equalsIgnoreCase(postFix.toLowerCase())) { 31. bufferedImageOne = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR); 32. } else { 33. bufferedImageOne = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 34. } 35. bufferedImageOne.getGraphics().drawImage(src.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null); 36. int[] imageArrayOne = new int[width * height];// 从图片中读取RGB 37. imageArrayOne = bufferedImageOne.getRGB(0, 0, width, height, imageArrayOne, 0, width); 38. 39. File fileTwo = new File(twoSrc);//读取第二张图片 40. src = ImageIO.read(fileTwo); 41. BufferedImage bufferedImageTwo = null; 42. if ("png".equalsIgnoreCase(postFix.toLowerCase())) { 43. bufferedImageTwo = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR); 44. } else { 45. bufferedImageTwo = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 46. } 47. bufferedImageTwo.getGraphics().drawImage(src.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null); 48. int[] imageArrayTwo = new int[width * height];// 从图片中读取RGB 49. imageArrayTwo = bufferedImageTwo.getRGB(0, 0, width, height, imageArrayTwo, 0, width); 50. 51. //生成新图片 52. BufferedImage imageNew = new BufferedImage(width*2, height, BufferedImage.TYPE_INT_RGB); 53. imageNew.setRGB(0 , 0, width, height, imageArrayOne, 0, width); //设置左半部分的RGB 54. imageNew.setRGB(width, 0, width, height, imageArrayTwo, 0, width); //设置右半部分的RGB 55. File outFile = new File(mergeSrc); 56. //写图片 57. ImageIO.write(imageNew, postFix, outFile); 58. } catch (Exception e) { 59. e.printStackTrace(); 60. } 61. } 62. 63. @Test 64. public void testMergeImage(){ 65. mergeImage("D:/source/image/1.jpg", "D:/source/image/2.png", "D:/source/image/3.png"); 66. } 67.}转载地址:http://aknoi.baihongyu.com/