最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實現(xiàn)多個單張tif文件合并成一個多頁tif文件

 更新時間:2023年09月20日 15:25:26   作者:風行無痕  
業(yè)務(wù)部門需要將多個單張的tiff文件,合并成一個多頁的tiff文件,本文就來介紹一下如何實現(xiàn),具有一定的參考價值,感興趣的可以了解一下

一、需求場景

業(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)文章

  • 基于Socket類以及ServerSocket類的實例講解

    基于Socket類以及ServerSocket類的實例講解

    下面小編就為大家?guī)硪黄赟ocket類以及ServerSocket類的實例講解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • JAVA Log 日志級別和使用配置示例

    JAVA Log 日志級別和使用配置示例

    本文介紹了Java中主流的日志框架,包括Logback和Log4j2,并詳細解釋了日志級別及其使用場景,同時,還提供了配置示例和使用技巧,如正確的日志記錄方式、異常日志記錄、性能優(yōu)化以及環(huán)境特定的日志配置,本文給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2025-11-11
  • Nacos通過RefreshScope實現(xiàn)配置自動更新的方式分享

    Nacos通過RefreshScope實現(xiàn)配置自動更新的方式分享

    這篇文章主要給大家介紹了Nacos如何通過RefreshScope實現(xiàn)配置自動更新,文中給了兩種實現(xiàn)方式供大家參考,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2023-09-09
  • 基于java Springboot實現(xiàn)教務(wù)管理系統(tǒng)詳解

    基于java Springboot實現(xiàn)教務(wù)管理系統(tǒng)詳解

    這篇文章主要介紹了Java 實現(xiàn)簡易教務(wù)管理系統(tǒng)的代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • 詳解MyBatis動態(tài)代理機制

    詳解MyBatis動態(tài)代理機制

    MyBatis的動態(tài)代理機制是其核心特性之一,通過該機制,開發(fā)者可以專注于定義接口和 SQL 映射,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2026-03-03
  • Maven解決jar包版本沖突的4種方法詳解

    Maven解決jar包版本沖突的4種方法詳解

    這篇文章主要給大家介紹了關(guān)于Maven解決jar包版本沖突的4種方法代碼,maven工程要導入jar包的坐標,就必須要考慮解決jar包沖突,文中介紹的非常詳細,需要的朋友可以參考下
    2023-07-07
  • SpringBoot連接Redis集群教程

    SpringBoot連接Redis集群教程

    這篇文章主要介紹了SpringBoot連接Redis集群教程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • SpringBoot整合Security實現(xiàn)權(quán)限控制框架(案例詳解)

    SpringBoot整合Security實現(xiàn)權(quán)限控制框架(案例詳解)

    Spring Security是一個能夠為基于Spring的企業(yè)應(yīng)用系統(tǒng)提供聲明式的安全訪問控制解決方案的安全框,是一個重量級的安全管理框架,本文給大家介紹的非常詳細,需要的朋友參考下吧
    2021-08-08
  • springboot集成spring cache緩存示例代碼

    springboot集成spring cache緩存示例代碼

    本篇文章主要介紹了springboot集成spring cache示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Java的分片上傳功能的實現(xiàn)

    Java的分片上傳功能的實現(xiàn)

    本文主要介紹了Java的分片上傳功能的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02

最新評論

萨迦县| 呼玛县| 若尔盖县| 清水县| 安远县| 松溪县| 上饶县| 临汾市| 昌吉市| 博白县| 土默特右旗| 长春市| 观塘区| 庆元县| 莎车县| 濮阳市| 奎屯市| 凌海市| 定南县| 嘉义市| 土默特左旗| 马鞍山市| 阿坝县| 巴彦淖尔市| 石景山区| 凤凰县| 华坪县| 河东区| 扎兰屯市| 株洲市| 黄平县| 师宗县| 梁平县| 呈贡县| 安仁县| 阳信县| 宁安市| 河北省| 隆子县| 安溪县| 吴桥县|