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'), ...
随机推荐
- Linux之awk命令详解
简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...
- [转]vs2008安装失败的总结与分享
转自:http://www.cnblogs.com/rockdean/archive/2010/01/13/1646851.html 今天系统是刚装的,今儿个也不是第一次装系统,也不是第一次装vs20 ...
- unicode转码,如:\u6d4b\u8bd5转成中文“测试”
public static void main(String[] args) { String s = "测试"; String tt = gbEncoding(s); // St ...
- 29、Oralce(五)
1)掌握PLSQL程序设计 2)掌握存储过程,函数和触发器 3)了解一些oralceSQL语句优化方案 ------------------------------------------------ ...
- Codeforces 741A:Arpa's loud Owf and Mehrdad's evil plan(LCM+思维)
http://codeforces.com/problemset/problem/741/A 题意:有N个人,第 i 个人有一个 a[i],意味着第 i 个人可以打电话给第 a[i] 个人,所以如果第 ...
- 多拉A梦——日语歌词
こんなこといいな できたらいいな 这件事真好啊 能够做到的话就好啦 あんな梦(ゆめ) こんな梦(ゆめ) いっぱいあるけど 那样的梦想 这样的梦想 我还有好多哪 みんなみんなみんな かなえてくれる 大家 ...
- [HTML]js动态修改表格里面的内容
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/T ...
- POJ 2406:Power Strings
Power Strings Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 41252 Accepted: 17152 D ...
- JSch - Java实现的SFTP(文件上传详解篇) [转载]
文章来源:http://www.cnblogs.com/longyg/archive/2012/06/25/2556576.html JSch是Java Secure Channel的缩写.JSch是 ...
- c# 中crystal report输出PDF文件
工程中引入以下crystal report的类库crystaldecisions.crystalreports.enginecrystaldecisions.reportsourcecrystalde ...
