Java實(shí)現(xiàn)多個單張tif文件合并成一個多頁tif文件
一、需求場景
業(yè)務(wù)部門需要將多個單張的tiff文件,合并成一個多頁的tiff文件,拒絕使用第三方成品的軟件,那么我們就尋求通過java代碼來處理,其實(shí)可能python處理會更簡單一點(diǎn)。
二、功能實(shí)現(xiàn)
maven的pom依賴?yán)锩嬷苯蛹尤胍韵聝?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實(shí)現(xiàn)多個單張tif文件合并成一個多頁tif文件的文章就介紹到這了,更多相關(guān)Java tif文件合并內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mybatis傳入List實(shí)現(xiàn)批量更新的示例代碼
這篇文章主要介紹了Mybatis傳入List實(shí)現(xiàn)批量更新的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
如何解決SpringBoot2.6及之后版本取消了循環(huán)依賴的支持問題
循環(huán)依賴指的是兩個或者多個bean之間相互依賴,形成一個閉環(huán),SpringBoot從2.6.0開始默認(rèn)不允許出現(xiàn)Bean循環(huán)引用,解決方案包括在全局配置文件設(shè)置允許循環(huán)引用存在、在SpringApplicationBuilder添加設(shè)置允許循環(huán)引用、構(gòu)造器注入2024-10-10
SpringBoot實(shí)現(xiàn)滑塊驗(yàn)證碼驗(yàn)證登陸校驗(yàn)功能詳解
驗(yàn)證碼作為一種自然人的機(jī)器人的判別工具,被廣泛的用于各種防止程序做自動化的場景中。傳統(tǒng)的字符型驗(yàn)證安全性已經(jīng)名存實(shí)亡的情況下,各種新型的驗(yàn)證碼如雨后春筍般涌現(xiàn),今天給大家分享一篇SpringBoot實(shí)現(xiàn)滑塊驗(yàn)證碼2022-09-09
Spring Security permitAll()不允許匿名訪問的操作
這篇文章主要介紹了Spring Security permitAll()不允許匿名訪問的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06
Java微信公眾平臺開發(fā)(8) 多媒體消息回復(fù)
這篇文章主要為大家詳細(xì)介紹了Java微信公眾平臺開發(fā)第八步,微信多媒體消息回復(fù),具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-04-04
Java后臺接口開發(fā)初步實(shí)戰(zhàn)教程
下面小編就為大家分享一篇 Java后臺接口開發(fā)初步實(shí)戰(zhàn)教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01

