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. 关于undefined reference to `WSASocketA@24'问题的解决

    关于 Eclipse 开发C++ Socket  ,在开发的过程中 用WinGW 平台编译, 示例server端: #include <winsock2.h> #include <m ...

  2. selenium webdriver三种等待方法

    webdriver三种等待方法 1.使用WebDriverWait from selenium import webdriverfrom selenium.webdriver.common.by im ...

  3. Java中的排序算法(2)

    Java中的排序算法(2) * 快速排序 * 快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为两个子序列(sub-lists). * 步骤为: * 1. 从数 ...

  4. win32sdk 编程整理的些资料

    #win32sdk编程积累经验# ## ListView ## - 创建imagelist HIMAGELIST hi; HBITMAP hBmp = LoadBitmap(hInst,MAKEINT ...

  5. Linux软件管理——yum命令详解

    yum install <softwarename> #安装指定软件 yum remove <softwarename> #卸载指定软件 yum update <soft ...

  6. Oracle:Authid Current_User使用

    由于用户拥有的role权限在存储过程是不可用的.遇到这种情况,我们一般需要显示授权,如grant create table to user;但这种方法太麻烦,有时候可能需要进行非常多的授权才能执行存储 ...

  7. Quartz2D简介及基本线条绘制

    * Quartz2D简介 1.什么是Quartz2D? 他是一个二维的绘图引擎,同时支持iOS和Mac系统 2.Quartz2D能完成的工作 画基本线条,绘制文字,图片,截图,自定义UIView. 3 ...

  8. [算法]判断一个数是不是2的N次方

    如果一个数是2^n,说明这个二进制里面只有一个1.除了1. a  = (10000)b a-1 = (01111)b a&(a-1) = 0. 如果一个数不是2^n, 说明它的二进制里含有多一 ...

  9. FTP操作类

    using System; using System.Collections.Generic; using System.Net; using System.IO; namespace HGFTP { ...

  10. VRRP配置与维护手册-1

    http://www.gpxz.com/diannao/hulianwang/80526.html 一  VRRP简介< xmlnamespace prefix ="o" n ...