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. 源码安装apache

    目标:源码安装apache 依赖包:apr.apr-util和pcre.其中pcre正则库要先安装,apr和apr-util(已解压)可以复制到apache下的资源库srclib下. 安装pcre: ...

  2. 如何从innodb的数据字典里恢复表结构

    需要学会使用percona-data-recovery-tool-for-innodb,用这个:sys_parser,参考这篇文章,

  3. 160928、JQuery解析XML数据的demo

    用JavaScript解析XML数据是常见的编程任务,JavaScript能做的,JQuery当然也能做.下面我们来总结几个使用JQuery解析XML的例子. 方案1 当后台返回的数据类型是xml对象 ...

  4. scala的静态,单列模式

    package com.test.scala.test /** * 单例对象,这种对象不能提供构造函数 */ object SingleObject { private var lastnumber= ...

  5. Java简单数据类型转换

      1. Integer<---String   (1) Integer x = new Integer(Integer.parseInt(String)); 2. Integer<--- ...

  6. 模块已加载,但对dllregisterServer的调用失败

    在注册dll或者ocx的时候, 经常会遇到这么一个问题: 模块  已加载,但对dllregisterServer的调用失败,错误代码为0x8004***** 网上有网友回复说需要在管理员的模式下进行注 ...

  7. java中的单例设计模式

    单例模式有一下特点: 1.单例类只能有一个实例. 2.单例类必须自己自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供 ...

  8. 在ecshop顶部会员信息提示区显示会员等级

    会员登陆后,在顶部会员信息提示区显示会员等级会员登陆后会在顶部出现这样的提示:您好,test2, 欢迎您回来 ! 进入用户中心 |退出现在设想在会员名后面加上“会员等级”效果如下:您好,test2,  ...

  9. 完整学习git四git对象

    1查看git对象 git cat-file 实践 git head到底指向的是什么 ➜ gittest git:(master) find .git -name HEAD -o -name maste ...

  10. 如何利用java把文件中的Unicode字符转换为汉字

    有些文件中存在Unicode字符和非Unicode字符,如何利用java快速的把文件中的Unicode字符转换为汉字而不影响文件中的其他字符呢, 我们知道虽然java 在控制台会把Unicode字符直 ...