1.合并图片

  1.  
  1. package com.tb.image;
  2.  
  3. import java.awt.Image;
  4. import java.awt.image.BufferedImage;
  5. import java.io.File;
  6. import java.io.FileOutputStream;
  7. import java.io.IOException;
  8.  
  9. import javax.imageio.ImageIO;
  10.  
  11. import com.sun.image.codec.jpeg.JPEGCodec;
  12. import com.sun.image.codec.jpeg.JPEGImageEncoder;
  13.  
  14. /**
  15. * 图片拼接
  16. * 把多张宽度一样的图片拼接成一张大图片
  17. * @author Administrator
  18. *
  19. */
  20. public class CreateBigImage {
  21.  
  22. public static void main(String[] args) {
  23. // System.out.println("123");
  24. //
  25. // //设置图片宽度相同
  26. // changeImage("D:/imgs/", "1.jpg", "1.jpg", 300,200);
  27. // changeImage("D:/imgs/", "2.jpg", "2.jpg", 300,200);
  28. // changeImage("D:/imgs/", "3.jpg", "3.jpg", 300,200);
  29. // //获取宽度相同的图片
  30. // String img1 = "D:/imgs/1.jpg";
  31. // String img2 = "D:/imgs/2.jpg";
  32. // String img3 = "D:/imgs/3.jpg";
  33. // String[] imgs = new String[]{img1,img2,img3};
  34. // //图片拼接
  35. // merge(imgs,"jpg","D:/imgs/big.jpg");
  36.  
  37. String folderPath = "D:/imgs";
  38. changeFolderImages(folderPath,600,400);
  39.  
  40. mergeFolderImgs(folderPath,"jpg","D:/imgs/merge.jpg");
  41.  
  42. }
  43. /**
  44. * 合并图片
  45. * @param folderPath 图片所在文件夹的绝对路径
  46. * @param imgType 合并后的图片类型(jpg、png...)
  47. * @param outAbsolutePath(输出合并后文件的绝对路径)
  48. * @return
  49. */
  50. public static String mergeFolderImgs(String folderPath,String imgType,String outAbsolutePath){
  51. File folder = new File(folderPath);
  52. File[] imgList = folder.listFiles();
  53. String[] imgPaths = new String[imgList.length];
  54.  
  55. for (int i = 0; i < imgList.length; i++) {
  56. //System.out.println("文件个数:"+imgList[i].length());
  57. imgPaths[i] = imgList[i].getAbsolutePath();
  58. System.out.println("第"+i+"张图片途径:"+imgPaths[i]);
  59. }
  60. merge(imgPaths,imgType,outAbsolutePath);
  61.  
  62. System.out.println("---------------------");
  63. File newImg = new File(outAbsolutePath);
  64. System.out.println(newImg.getName());
  65. return newImg.getName();
  66. }
  67.  
  68. /**
  69. * 设置图片大小(单张图片)
  70. * @param path 路径
  71. * @param oldimg 旧图片名称
  72. * @param newimg 新图片名称
  73. * @param newWidth 新图片宽度
  74. * @param newHeight 新图片高度
  75. */
  76. public static void changeImage(String path, String oldimg, String newimg, int newWidth,int newHeight) {
  77. try {
  78. File file = new File(path + oldimg);
  79. Image img = ImageIO.read(file);
  80. // 构造Image对象
  81. // int wideth = img.getWidth(null); // 得到源图宽
  82. // int height = img.getHeight(null); // 得到源图长
  83. BufferedImage tag = new BufferedImage(newWidth, newHeight,
  84. BufferedImage.TYPE_INT_RGB);
  85. tag.getGraphics()
  86. .drawImage(img, 0, 0, newWidth, newHeight, null); // 绘制后的图
  87. FileOutputStream out = new FileOutputStream(path + newimg);
  88. JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
  89. encoder.encode(tag); // 近JPEG编码
  90. out.close();
  91. } catch (IOException e) {
  92. System.out.println("处理文件出现异常");
  93. e.printStackTrace();
  94. }
  95. }
  96.  
  97. /**
  98. * 设置图片大小(批量处理整个文件夹中的图片)
  99. * @param folderPath 文件夹路径
  100. * @param newWidth 新图片宽度
  101. * @param newHeight 新图片高度
  102. */
  103. public static void changeFolderImages(String folderPath, int newWidth,int newHeight) {
  104. try {
  105. File folder = new File(folderPath);//得到文件夹
  106. File[] imgList = folder.listFiles();//得到文件夹中的所有图片
  107. Image image = null;//定义一张图片
  108.  
  109. BufferedImage bfImg = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
  110. FileOutputStream outputStream = null;
  111. JPEGImageEncoder encoder = null;
  112. for (int i = 0; i < imgList.length; i++) {
  113. image = ImageIO.read(imgList[i]);//将得到的图片放入新定义的图片中
  114. bfImg.getGraphics().drawImage(image, 0, 0, newWidth, newHeight, null);//绘制后的图
  115. outputStream = new FileOutputStream(imgList[i]);
  116. encoder = JPEGCodec.createJPEGEncoder(outputStream);
  117. encoder.encode(bfImg);
  118. }
  119. outputStream.close();
  120. } catch (IOException e) {
  121. System.out.println("处理文件出现异常");
  122. e.printStackTrace();
  123. }
  124. }
  125.  
  126. /**
  127. * Java拼接多张图片
  128. *
  129. * @param pics:图片源文件 (必须要宽度一样),如:
  130. * String img1 = "D:/imgs/3.jpg";
  131. * String img2 = "D:/imgs/3.jpg";
  132. * String img3 = "D:/imgs/big.jpg";
  133. * String[] pics = new String[]{img1,img2,img3};
  134. * @param type :图片输出类型(jpg,png,jpeg...)
  135. * @param dst_pic :图片输出绝对路径,如 String dst_pic="D:/imgs/big2.jpg";
  136. * @return
  137. */
  138. public static boolean merge(String[] pics, String type, String dst_pic) {
  139.  
  140. int len = pics.length; //图片文件个数
  141. if (len < 1) {
  142. System.out.println("pics len < 1");
  143. return false;
  144. }
  145. File[] src = new File[len];
  146. BufferedImage[] images = new BufferedImage[len];
  147. int[][] ImageArrays = new int[len][];
  148. for (int i = 0; i < len; i++) {
  149. try {
  150. src[i] = new File(pics[i]);
  151. images[i] = ImageIO.read(src[i]);
  152. } catch (Exception e) {
  153. e.printStackTrace();
  154. return false;
  155. }
  156. int width = images[i].getWidth();
  157. int height = images[i].getHeight();
  158. ImageArrays[i] = new int[width * height];// 从图片中读取RGB
  159. ImageArrays[i] = images[i].getRGB(0, 0, width, height,
  160. ImageArrays[i], 0, width);
  161. }
  162.  
  163. int dst_height = 0;
  164. int dst_width = images[0].getWidth();
  165. for (int i = 0; i < images.length; i++) {
  166. dst_width = dst_width > images[i].getWidth() ? dst_width
  167. : images[i].getWidth();
  168.  
  169. dst_height += images[i].getHeight();
  170. }
  171. System.out.println(dst_width);
  172. System.out.println(dst_height);
  173. if (dst_height < 1) {
  174. System.out.println("dst_height < 1");
  175. return false;
  176. }
  177.  
  178. // 生成新图片
  179. try {
  180. // dst_width = images[0].getWidth();
  181. BufferedImage ImageNew = new BufferedImage(dst_width, dst_height,
  182. BufferedImage.TYPE_INT_RGB);
  183. int height_i = 0;
  184. for (int i = 0; i < images.length; i++) {
  185. ImageNew.setRGB(0, height_i, dst_width, images[i].getHeight(),
  186. ImageArrays[i], 0, dst_width);
  187. height_i += images[i].getHeight();
  188. }
  189.  
  190. File outFile = new File(dst_pic);
  191. ImageIO.write(ImageNew, type, outFile);// 写图片
  192. } catch (Exception e) {
  193. e.printStackTrace();
  194. return false;
  195. }
  196. return true;
  197. }
  198.  
  199. }
  1.  

Java——Image 图片合并的更多相关文章

  1. Java中图片压缩处理

    原文http://cuisuqiang.iteye.com/blog/2045855 整理文档,搜刮出一个Java做图片压缩的代码,稍微整理精简一下做下分享. 首先,要压缩的图片格式不能说动态图片,你 ...

  2. java获取图片原始尺寸

    java获取图片原始尺寸 URL url = null; InputStream is = null; BufferedImage img = null; try { url = new URL(pi ...

  3. java Swing 图片缓冲机制

    java Swing 图片缓冲机制: 参考:http://jorneyr.iteye.com/blog/868858#comments package util; import java.awt.ge ...

  4. java实现图片压缩

    java实现图片压缩 package Test; import java.awt.Image; import java.awt.image.BufferedImage; import java.io. ...

  5. java多图片上传--前端实现预览--图片压缩 、图片缩放,区域裁剪,水印,旋转,保持比例。

    java多图片上传--前端实现预览 前端代码: https://pan.baidu.com/s/1cqKbmjBSXOhFX4HR1XGkyQ 解压后: java后台: <!--文件上传--&g ...

  6. 图片合并成PDF,两个PDF的合并

    需求: 将多张手机照片合并成一个PDF,并于另一个成型PDF合并 过程: 使用全能扫描王处理一遍,拆剪掉多余部分,并提高亮度增加文字对比度 合并: 使用Faststone Capture合并图片即可. ...

  7. Java-Runoob-高级教程-实例-数组:07. Java 实例 – 数组合并

    ylbtech-Java-Runoob-高级教程-实例-数组:07. Java 实例 – 数组合并 1.返回顶部 1. Java 实例 - 数组合并  Java 实例 以下实例演示了如何通过 List ...

  8. java裁剪图片

    java裁剪图片保存到指定位置 /** * 图片裁剪通用接口 * * @param src 源图片地址,图片格式PNG * @param dest 目的图片地址 * @param x 图片起始点x坐标 ...

  9. gulp-css-spriter 将css代码中的切片图片合并成雪碧图

    NPM地址:https://www.npmjs.com/package/gulp-css-spriter/ 配置gulpfile.js: var gulp = require('gulp'),     ...

随机推荐

  1. android 学习随笔十二(网络:使用异步HttpClient框架)

    使用异步HttpClient框架发送get.post请求 在https://github.com/ 搜索 asyn-http https://github.com/search?utf8=✓& ...

  2. Table Properties [AX 2012]

    Table Properties [AX 2012] 1 out of 2 rated this helpful - Rate this topic Updated: July 20, 2012 Ap ...

  3. centos查看磁盘扇区大小等信息

    fdisk -l 说明一下: “Disk /dev/sda: 53.7 GB, 53687091200 bytes” 表示第一块磁盘的大小为53.7GB. "255 heads"表 ...

  4. coco2dx服务器简单例子

    实现的单个socket例子,了解socket原理. 先创建一个win32的项目(命令行的),作为服务端 // SocketServer.cpp : 定义控制台应用程序的入口点.// #include ...

  5. 【转】使用JDK自带jvisualvm监控tomcat

    转载地址: http://my.oschina.net/kone/blog/157239 jdk自带有个jvisualvm工具.该工具是用来监控java运行程序的cpu.内存.线程等的使用情况.并且使 ...

  6. Oracle字符集设置

    客户端与服务端字符集不一致会造成乱码问题. 在服务端: sql>SELECT * FROM NLS_DATABASE_PARAMETERS; 在查询结果中关注如下参数: nls_language ...

  7. 20151210001 DataGridView 选中与被选中

    // DataSet_IP list        private void DataSet_IP_list()        {            DataSet_IP = new System ...

  8. 修改Windows下的键盘映射

    在知乎上看见有人说Ctrl键放在A的旁边会更方便,于是我就琢磨着把Cap Lock键改成Ctrl 我肯定不愿意用第三方工具修改的,于是找到了这篇文章,很容易的就修改成功,现在用起来果然舒服多了. 附上 ...

  9. java交换两个数字位置

    第一种:在main输出,通过反射实现 1 public static void main(String[] args) throws Exception { Integer a = 1; Intege ...

  10. SQL 数据类型,增删改查语句

    数据类型: --类似于C#中的数据类型 Datetime   范围是:1753.1.1-- 9999.12.31 Smalldatetime      1900.1.1 --2079.6.6 操作: ...