Java——Image 图片合并
1.合并图片
- package com.tb.image;
- import java.awt.Image;
- import java.awt.image.BufferedImage;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import javax.imageio.ImageIO;
- import com.sun.image.codec.jpeg.JPEGCodec;
- import com.sun.image.codec.jpeg.JPEGImageEncoder;
- /**
- * 图片拼接
- * 把多张宽度一样的图片拼接成一张大图片
- * @author Administrator
- *
- */
- public class CreateBigImage {
- public static void main(String[] args) {
- // System.out.println("123");
- //
- // //设置图片宽度相同
- // changeImage("D:/imgs/", "1.jpg", "1.jpg", 300,200);
- // changeImage("D:/imgs/", "2.jpg", "2.jpg", 300,200);
- // changeImage("D:/imgs/", "3.jpg", "3.jpg", 300,200);
- // //获取宽度相同的图片
- // String img1 = "D:/imgs/1.jpg";
- // String img2 = "D:/imgs/2.jpg";
- // String img3 = "D:/imgs/3.jpg";
- // String[] imgs = new String[]{img1,img2,img3};
- // //图片拼接
- // merge(imgs,"jpg","D:/imgs/big.jpg");
- String folderPath = "D:/imgs";
- changeFolderImages(folderPath,600,400);
- mergeFolderImgs(folderPath,"jpg","D:/imgs/merge.jpg");
- }
- /**
- * 合并图片
- * @param folderPath 图片所在文件夹的绝对路径
- * @param imgType 合并后的图片类型(jpg、png...)
- * @param outAbsolutePath(输出合并后文件的绝对路径)
- * @return
- */
- public static String mergeFolderImgs(String folderPath,String imgType,String outAbsolutePath){
- File folder = new File(folderPath);
- File[] imgList = folder.listFiles();
- String[] imgPaths = new String[imgList.length];
- for (int i = 0; i < imgList.length; i++) {
- //System.out.println("文件个数:"+imgList[i].length());
- imgPaths[i] = imgList[i].getAbsolutePath();
- System.out.println("第"+i+"张图片途径:"+imgPaths[i]);
- }
- merge(imgPaths,imgType,outAbsolutePath);
- System.out.println("---------------------");
- File newImg = new File(outAbsolutePath);
- System.out.println(newImg.getName());
- return newImg.getName();
- }
- /**
- * 设置图片大小(单张图片)
- * @param path 路径
- * @param oldimg 旧图片名称
- * @param newimg 新图片名称
- * @param newWidth 新图片宽度
- * @param newHeight 新图片高度
- */
- public static void changeImage(String path, String oldimg, String newimg, int newWidth,int newHeight) {
- try {
- File file = new File(path + oldimg);
- Image img = ImageIO.read(file);
- // 构造Image对象
- // int wideth = img.getWidth(null); // 得到源图宽
- // int height = img.getHeight(null); // 得到源图长
- BufferedImage tag = new BufferedImage(newWidth, newHeight,
- BufferedImage.TYPE_INT_RGB);
- tag.getGraphics()
- .drawImage(img, 0, 0, newWidth, newHeight, null); // 绘制后的图
- FileOutputStream out = new FileOutputStream(path + newimg);
- JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
- encoder.encode(tag); // 近JPEG编码
- out.close();
- } catch (IOException e) {
- System.out.println("处理文件出现异常");
- e.printStackTrace();
- }
- }
- /**
- * 设置图片大小(批量处理整个文件夹中的图片)
- * @param folderPath 文件夹路径
- * @param newWidth 新图片宽度
- * @param newHeight 新图片高度
- */
- public static void changeFolderImages(String folderPath, int newWidth,int newHeight) {
- try {
- File folder = new File(folderPath);//得到文件夹
- File[] imgList = folder.listFiles();//得到文件夹中的所有图片
- Image image = null;//定义一张图片
- BufferedImage bfImg = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
- FileOutputStream outputStream = null;
- JPEGImageEncoder encoder = null;
- for (int i = 0; i < imgList.length; i++) {
- image = ImageIO.read(imgList[i]);//将得到的图片放入新定义的图片中
- bfImg.getGraphics().drawImage(image, 0, 0, newWidth, newHeight, null);//绘制后的图
- outputStream = new FileOutputStream(imgList[i]);
- encoder = JPEGCodec.createJPEGEncoder(outputStream);
- encoder.encode(bfImg);
- }
- outputStream.close();
- } catch (IOException e) {
- System.out.println("处理文件出现异常");
- e.printStackTrace();
- }
- }
- /**
- * Java拼接多张图片
- *
- * @param pics:图片源文件 (必须要宽度一样),如:
- * String img1 = "D:/imgs/3.jpg";
- * String img2 = "D:/imgs/3.jpg";
- * String img3 = "D:/imgs/big.jpg";
- * String[] pics = new String[]{img1,img2,img3};
- * @param type :图片输出类型(jpg,png,jpeg...)
- * @param dst_pic :图片输出绝对路径,如 String dst_pic="D:/imgs/big2.jpg";
- * @return
- */
- public static boolean merge(String[] pics, String type, String dst_pic) {
- int len = pics.length; //图片文件个数
- if (len < 1) {
- System.out.println("pics len < 1");
- return false;
- }
- 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(pics[i]);
- images[i] = ImageIO.read(src[i]);
- } catch (Exception e) {
- e.printStackTrace();
- return false;
- }
- 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 dst_height = 0;
- int dst_width = images[0].getWidth();
- for (int i = 0; i < images.length; i++) {
- dst_width = dst_width > images[i].getWidth() ? dst_width
- : images[i].getWidth();
- dst_height += images[i].getHeight();
- }
- System.out.println(dst_width);
- System.out.println(dst_height);
- if (dst_height < 1) {
- System.out.println("dst_height < 1");
- return false;
- }
- // 生成新图片
- try {
- // dst_width = images[0].getWidth();
- BufferedImage ImageNew = new BufferedImage(dst_width, dst_height,
- BufferedImage.TYPE_INT_RGB);
- int height_i = 0;
- for (int i = 0; i < images.length; i++) {
- ImageNew.setRGB(0, height_i, dst_width, images[i].getHeight(),
- ImageArrays[i], 0, dst_width);
- height_i += images[i].getHeight();
- }
- File outFile = new File(dst_pic);
- ImageIO.write(ImageNew, type, outFile);// 写图片
- } catch (Exception e) {
- e.printStackTrace();
- return false;
- }
- return true;
- }
- }
Java——Image 图片合并的更多相关文章
- Java中图片压缩处理
原文http://cuisuqiang.iteye.com/blog/2045855 整理文档,搜刮出一个Java做图片压缩的代码,稍微整理精简一下做下分享. 首先,要压缩的图片格式不能说动态图片,你 ...
- java获取图片原始尺寸
java获取图片原始尺寸 URL url = null; InputStream is = null; BufferedImage img = null; try { url = new URL(pi ...
- java Swing 图片缓冲机制
java Swing 图片缓冲机制: 参考:http://jorneyr.iteye.com/blog/868858#comments package util; import java.awt.ge ...
- java实现图片压缩
java实现图片压缩 package Test; import java.awt.Image; import java.awt.image.BufferedImage; import java.io. ...
- java多图片上传--前端实现预览--图片压缩 、图片缩放,区域裁剪,水印,旋转,保持比例。
java多图片上传--前端实现预览 前端代码: https://pan.baidu.com/s/1cqKbmjBSXOhFX4HR1XGkyQ 解压后: java后台: <!--文件上传--&g ...
- 图片合并成PDF,两个PDF的合并
需求: 将多张手机照片合并成一个PDF,并于另一个成型PDF合并 过程: 使用全能扫描王处理一遍,拆剪掉多余部分,并提高亮度增加文字对比度 合并: 使用Faststone Capture合并图片即可. ...
- Java-Runoob-高级教程-实例-数组:07. Java 实例 – 数组合并
ylbtech-Java-Runoob-高级教程-实例-数组:07. Java 实例 – 数组合并 1.返回顶部 1. Java 实例 - 数组合并 Java 实例 以下实例演示了如何通过 List ...
- java裁剪图片
java裁剪图片保存到指定位置 /** * 图片裁剪通用接口 * * @param src 源图片地址,图片格式PNG * @param dest 目的图片地址 * @param x 图片起始点x坐标 ...
- gulp-css-spriter 将css代码中的切片图片合并成雪碧图
NPM地址:https://www.npmjs.com/package/gulp-css-spriter/ 配置gulpfile.js: var gulp = require('gulp'), ...
随机推荐
- android 学习随笔十二(网络:使用异步HttpClient框架)
使用异步HttpClient框架发送get.post请求 在https://github.com/ 搜索 asyn-http https://github.com/search?utf8=✓& ...
- Table Properties [AX 2012]
Table Properties [AX 2012] 1 out of 2 rated this helpful - Rate this topic Updated: July 20, 2012 Ap ...
- centos查看磁盘扇区大小等信息
fdisk -l 说明一下: “Disk /dev/sda: 53.7 GB, 53687091200 bytes” 表示第一块磁盘的大小为53.7GB. "255 heads"表 ...
- coco2dx服务器简单例子
实现的单个socket例子,了解socket原理. 先创建一个win32的项目(命令行的),作为服务端 // SocketServer.cpp : 定义控制台应用程序的入口点.// #include ...
- 【转】使用JDK自带jvisualvm监控tomcat
转载地址: http://my.oschina.net/kone/blog/157239 jdk自带有个jvisualvm工具.该工具是用来监控java运行程序的cpu.内存.线程等的使用情况.并且使 ...
- Oracle字符集设置
客户端与服务端字符集不一致会造成乱码问题. 在服务端: sql>SELECT * FROM NLS_DATABASE_PARAMETERS; 在查询结果中关注如下参数: nls_language ...
- 20151210001 DataGridView 选中与被选中
// DataSet_IP list private void DataSet_IP_list() { DataSet_IP = new System ...
- 修改Windows下的键盘映射
在知乎上看见有人说Ctrl键放在A的旁边会更方便,于是我就琢磨着把Cap Lock键改成Ctrl 我肯定不愿意用第三方工具修改的,于是找到了这篇文章,很容易的就修改成功,现在用起来果然舒服多了. 附上 ...
- java交换两个数字位置
第一种:在main输出,通过反射实现 1 public static void main(String[] args) throws Exception { Integer a = 1; Intege ...
- SQL 数据类型,增删改查语句
数据类型: --类似于C#中的数据类型 Datetime 范围是:1753.1.1-- 9999.12.31 Smalldatetime 1900.1.1 --2079.6.6 操作: ...