Java實現(xiàn)多個單張tif文件合并成一個多頁tif文件
一、需求場景
業(yè)務(wù)部門需要將多個單張的tiff文件,合并成一個多頁的tiff文件,拒絕使用第三方成品的軟件,那么我們就尋求通過java代碼來處理,其實可能python處理會更簡單一點。
二、功能實現(xiàn)
maven的pom依賴里面直接加入以下內(nèi)容:
記得加入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();
// 設(shè)置壓縮模式 壓縮圖片大小 避免出現(xiàn)合并后尺寸過大的問題
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());
}
}
}到此這篇關(guān)于Java實現(xiàn)多個單張tif文件合并成一個多頁tif文件的文章就介紹到這了,更多相關(guān)Java tif文件合并內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Nacos通過RefreshScope實現(xiàn)配置自動更新的方式分享
這篇文章主要給大家介紹了Nacos如何通過RefreshScope實現(xiàn)配置自動更新,文中給了兩種實現(xiàn)方式供大家參考,對大家的學習或工作有一定的幫助,需要的朋友可以參考下2023-09-09
基于java Springboot實現(xiàn)教務(wù)管理系統(tǒng)詳解
這篇文章主要介紹了Java 實現(xiàn)簡易教務(wù)管理系統(tǒng)的代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-08-08
SpringBoot整合Security實現(xiàn)權(quán)限控制框架(案例詳解)
Spring Security是一個能夠為基于Spring的企業(yè)應(yīng)用系統(tǒng)提供聲明式的安全訪問控制解決方案的安全框,是一個重量級的安全管理框架,本文給大家介紹的非常詳細,需要的朋友參考下吧2021-08-08
springboot集成spring cache緩存示例代碼
本篇文章主要介紹了springboot集成spring cache示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-05-05

