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. Jni层回调java代码【转】

    本文转载自:http://www.linuxidc.com/Linux/2014-03/97562.htm JNI是Java Native Interface的缩写,是Java平台的重要特性,使得Ja ...

  2. asp显示多条记录的代码

    asp显示多条记录的代码 仅供参考 <%for i=1 to RS.PageSize%> <% if RS.EOF then exit for end if %> <tr ...

  3. SendKeys:基本使用

    使用SendKeys将键击和组合键击发送到活动应用程序.此类无法实例化.若要发送一个键击给某个类并立即继续程序流,请使用Send.若要等待键击启动的任何进程,请使用SendWait. 每个键都由一个或 ...

  4. Mysql数据库知识-Mysql索引总结 mysql mysql数据库 mysql函数

    mysql数据库知识-Mysql索引总结: 索引(Index)是帮助MySQL高效获取数据的数据结构. 下边是自己整理的资料与自己的学习总结,,做一个汇总. 一.真的有必要使用索引吗? 不是每一个性能 ...

  5. 织梦系统中出现DedeTag Engine Create File False提示原因及解决方法

    今天更新网站时dedecms系统时,遇到一个问题:DedeTag Engine Create File False  出现这样的提示. 其实这也不算是什么错误,我个人觉得最重要的一点就是根目录下没有给 ...

  6. C#:绘制Winform窗体

    Winform窗体缺少左上角效果: public void SetWindowRegion() { System.Drawing.Drawing2D.GraphicsPath FormPath; Fo ...

  7. 每日一九度之 题目1030:毕业bg

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2046 解决:894 题目描述:     每年毕业的季节都会有大量毕业生发起狂欢,好朋友们相约吃散伙饭,网络上称为“bg”.参加不同团体的b ...

  8. JavaScript DOM 编程艺术(第2版)读书笔记(5)

    最佳实践 平稳退化 网站的访问者完全有可能使用的是不支持Javascript的浏览器,还有一种可能是虽然浏览器支持Javascript,但用户已经禁用它了.如果没有考虑到这种情况,人们在访问你们的网站 ...

  9. 【转】成功在AMD主机上用虚拟机安装原版雪豹

    转载地址:http://www.jzh.me/archives/205.html/comment-page-1 一直都很想安装苹果的系统,当雪豹出来的时候就更加想了,但是自己的机器是AMD的,而且还是 ...

  10. matlab mat文件读取和调用

    13.1 数据基本操作 本节介绍基本的数据操作,包括工作区的保存.导入和文件打开.13.1.1 文件的存储 MATLAB支持工作区的保存.用户可以将工作区或工作区中的变量以文件的形式保存,以备在需要时 ...