Java实现多个单张tif文件合并成一个多页tif文件
作者:风行無痕
业务部门需要将多个单张的tiff文件,合并成一个多页的tiff文件,本文就来介绍一下如何实现,具有一定的参考价值,感兴趣的可以了解一下
一、需求场景
业务部门需要将多个单张的tiff文件,合并成一个多页的tiff文件,拒绝使用第三方成品的软件,那么我们就寻求通过java代码来处理,其实可能python处理会更简单一点。
二、功能实现
maven的pom依赖里面直接加入以下内容:
记得加入repository,否则会无法下载。
<dependencies>
<dependency>
<groupId>com.sun.media</groupId>
<artifactId>jai-codec</artifactId>
<version>1.1.3</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>mvnrepository</id>
<name>mvnrepository</name>
<url>https://repository.jboss.org/maven2/</url>
</repository>
</repositories>直接贴代码
package com.zx.tool.tif;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import javax.media.jai.JAI;
import javax.media.jai.PlanarImage;
import com.sun.media.jai.codec.FileSeekableStream;
import com.sun.media.jai.codec.ImageCodec;
import com.sun.media.jai.codec.ImageEncoder;
import com.sun.media.jai.codec.TIFFEncodeParam;
import com.sun.media.jai.codec.TIFFField;
/**
* 多张单页tif文件合并成一张多页tif文件
* @author xiang
*
*/
public class MergeTif {
public static void main(String[] args) throws Exception {
merge2OneTif();
}
public static void merge2OneTif() {
try {
int filezise = 0;
DateFormat df=new SimpleDateFormat("yyyyMMdd HHmmss");
String inputPath = "d:\\TiffMerge\\input\\";
String outputPath = "d:\\TiffMerge\\output\\new_"+ df.format(new Date()) +".tif";
// tif文件所在目录
File[] files = new File(inputPath).listFiles();
ArrayList<PlanarImage> pages = new ArrayList<PlanarImage>(files.length - 1);
FileSeekableStream[] stream = new FileSeekableStream[files.length];
for (int i = 0; i < files.length; i++) {
System.out.println(files[i].getCanonicalPath());
// 只处理tif文件
if(!files[i].getName().endsWith(".tif"))
continue;
stream[i]= new FileSeekableStream(files[i].getCanonicalPath());
filezise = filezise + 1;
}
// 将第一个tif文件作为第一页
PlanarImage firstPage = JAI.create("stream", stream[0]);
for (int i = 1; i < files.length; i++) {
// 只处理tif文件
if(!files[i].getName().endsWith(".tif"))
continue;
PlanarImage page = JAI.create("stream", stream[i]);
pages.add(page);
}
TIFFEncodeParam param = new TIFFEncodeParam();
// 设置压缩模式 压缩图片大小 避免出现合并后尺寸过大的问题
param.setCompression(TIFFEncodeParam.COMPRESSION_PACKBITS);
TIFFField[] extras = new TIFFField[4];
extras[0] = new TIFFField(262, TIFFField.TIFF_SHORT, 1, (Object) new short[] { 6 });
extras[1] = new TIFFField(282, 5, 1, (Object) new long[][]{{(long) 200, 1}, {0, 0}});
extras[2] = new TIFFField(283, 5, 1, (Object) new long[][]{{(long) 200, 1}, {0, 0}});
extras[3] = new TIFFField(258, TIFFField.TIFF_SHORT, 1, (Object) new char[] { 8 });
param.setExtraFields(extras);
//合并后新生成的图片
OutputStream os = new FileOutputStream(outputPath);
ImageEncoder enc = ImageCodec.createImageEncoder("tiff", os, param);
param.setExtraImages(pages.iterator());
enc.encode(firstPage);
for (int i = 0; i < files.length; i++) {
if(stream[i]!=null)
stream[i].close();
}
os.close();
System.out.println("merge "+ filezise +" Tif success");
} catch (Exception e) {
e.printStackTrace();
System.out.println("merge2OneTif error =>" + e.toString());
}
}
}到此这篇关于Java实现多个单张tif文件合并成一个多页tif文件的文章就介绍到这了,更多相关Java tif文件合并内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
