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