欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一、需求場(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)批量更新的示例代碼

    這篇文章主要介紹了Mybatis傳入List實(shí)現(xiàn)批量更新的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 如何解決SpringBoot2.6及之后版本取消了循環(huán)依賴的支持問題

    如何解決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-10
  • SpringBoot整合高德地圖天氣查詢的全過程

    SpringBoot整合高德地圖天氣查詢的全過程

    這篇文章主要給大家介紹了關(guān)于SpringBoot整合高德地圖天氣查詢的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用springboot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-12-12
  • 詳解Java解析XML的四種方法

    詳解Java解析XML的四種方法

    本篇文章主要介紹了java解析XML的幾種方式,XML現(xiàn)在已經(jīng)成為一種通用的數(shù)據(jù)交換格式,給數(shù)據(jù)集成與交互提供了方便,有需要的可以了解一下。
    2016-11-11
  • 詳解Java 信號(hào)量Semaphore

    詳解Java 信號(hào)量Semaphore

    這篇文章主要介紹了Java 信號(hào)量Semaphore的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)Java并發(fā),感興趣的朋友可以了解下
    2020-09-09
  • SpringBoot實(shí)現(xiàn)滑塊驗(yàn)證碼驗(yàn)證登陸校驗(yàn)功能詳解

    SpringBoot實(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-09
  • Maven中optional標(biāo)簽用法詳解

    Maven中optional標(biāo)簽用法詳解

    這篇文章主要介紹了Maven中optional標(biāo)簽,文章中有詳細(xì)的代碼示例供大家參考,對(duì)大家的學(xué)習(xí)或工作有一定的參考價(jià)值,感興趣的小伙伴可以借鑒一下
    2023-05-05
  • Spring Security permitAll()不允許匿名訪問的操作

    Spring Security permitAll()不允許匿名訪問的操作

    這篇文章主要介紹了Spring Security permitAll()不允許匿名訪問的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java微信公眾平臺(tái)開發(fā)(8) 多媒體消息回復(fù)

    Java微信公眾平臺(tái)開發(fā)(8) 多媒體消息回復(fù)

    這篇文章主要為大家詳細(xì)介紹了Java微信公眾平臺(tái)開發(fā)第八步,微信多媒體消息回復(fù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Java后臺(tái)接口開發(fā)初步實(shí)戰(zhàn)教程

    Java后臺(tái)接口開發(fā)初步實(shí)戰(zhàn)教程

    下面小編就為大家分享一篇 Java后臺(tái)接口開發(fā)初步實(shí)戰(zhàn)教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01

最新評(píng)論