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 图片合并的更多相关文章

  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 应用架构随笔四(View、ViewGroup)

    View表示了用户界面的基本构建模块. 一个View占用了屏幕上的一个矩形区域并且负责界面绘制和事件处理.手机屏幕上所有看得见摸得着的都是View. Activity是四大组件中唯一一个用来和用户进行 ...

  2. virtualbox -centos ping不通外网

    centos上配置网卡自动获取ip 在路由器上配置了ip和mac绑定.ping不通外网.删除路由器上的静态mac绑定后OK,不明

  3. 160909、Filter多方式拦截、禁用IE图片缓存、Filter设置字符编码

    dispatcher多方式拦截 我们来看一个例子 我们定义一个index.jsp,里面有一个链接跳转到dispatcher.jsp页面 <body> <a href="di ...

  4. Qt实现停靠功能

  5. Oracle之主键的创建、添加、删除操作

    一.创建表的同时创建主键约束 1.1.无命名 SQL)); Table created SQL> select table_name,index_name from user_indexes w ...

  6. sqlite加密

    一直使用sqlite来管理本地的数据,但是Xcode中的SDK中集成的sqlite是免费的,不提供加密模块,但是程序中用到的很多数据,有时候是不想让别人看到,一开始虑修改sqlite的源码,自己重新编 ...

  7. java 类型转化

    String 转int s="12345"; int i; 第一种方法:i=Integer.parseInt(s);;//直接使用静态方法,不会产生多余的对象,但会抛出异常 第二种 ...

  8. SDUT 2409:The Best Seat in ACM Contest

    The Best Seat in ACM Contest Time Limit: 1000MS Memory limit: 65536K 题目描述 Cainiao is a university st ...

  9. Ajax案例:三级联动查询员工的信息(三张表进行内连接)

    需求分析: 通过数据库连接池,可以查询到数据库中员工的各种信息,通过点击下拉框的方式实现三级联动,即:没有点击city下拉框,后面两个下拉框中没有值,这样,点击city下拉框,department下拉 ...

  10. Piggy-Bank

    Piggy-Bank Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ...