Java实现多个单张tif文件合并成一个多页tif文件
更新时间:2023年09月20日 15:25:26 作者:风行無痕
业务部门需要将多个单张的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文件合并内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Nacos通过RefreshScope实现配置自动更新的方式分享
这篇文章主要给大家介绍了Nacos如何通过RefreshScope实现配置自动更新,文中给了两种实现方式供大家参考,对大家的学习或工作有一定的帮助,需要的朋友可以参考下2023-09-09
SpringBoot整合Security实现权限控制框架(案例详解)
Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框,是一个重量级的安全管理框架,本文给大家介绍的非常详细,需要的朋友参考下吧2021-08-08
springboot集成spring cache缓存示例代码
本篇文章主要介绍了springboot集成spring cache示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2017-05-05


最新评论