文档章节

JAI jar包转换tif文件报错解决办法,多页tif转多个jpeg方法

遛狗少年
 遛狗少年
发布于 2015/07/22 13:21
字数 536
阅读 390
收藏 1


1. 定义文件枚举类

/**
 * 文件类型枚举类
 *
 */
public enum FileType {
		/**  
	    * JEPG.  
	    */  
	    JPEG("FFD8FF"),   
	       
	   /**  
	    * PNG.  
	    */  
	   PNG("89504E47"),   
	      
	   /**  
	    * GIF.  
	    */  
	    GIF("47494638"),   
	       
	    /**  
	     * TIFF.  
	     */  
	    TIFF("49492A00"), 
	    
	    /**  
	     * TIF.  
	     */  
	    TIF("49492A00"),
	       
	    /**  
	     * Windows Bitmap.  
	     */  
	    BMP("424D"),   
	       
	    /**  
	     * Rich Text Format.  
	     */ 
	    RTF("7B5C727466"),   
	       
	    /**  
	     * XML.  
	     */  
	    XML("3C3F786D6C"),   
	       
	    /**  
	     * HTML.  
	     */  
	    HTML("68746D6C3E"),   
	   

	    /**  
	     * Adobe Acrobat.  
	     */  
	    PDF("255044462D312E"),   
	       
	   
	    /**  
	     * ZIP Archive.  
	     */  
	    ZIP("504B0304"),   
	       
	    /**  
	     * RAR Archive.  
	     */  
	    RAR("52617221"),   
	       
	    /**  
	     * Wave.  
	     */  
	    WAV("57415645"),   
	       
	    /**  
	     * AVI.  
	     */  
	    AVI("41564920"); 
	    
	    private String value = "";
	    
	    private FileType(String value) {
	    	this.value = value;
	    }
	    
	    public String getValue() {
	    	return value;
	    }
	    
	    public void setValue(String value) {
	    	this.value = value;
	    }
}

2. 定义文件类型的工具类,来判断文件类型

/**  
 * 文件类型判断类  
 */  
public final class FileTypeJudge {   
       
    /**  
     * Constructor  
     */  
    private FileTypeJudge() {}   
       
    /**  
     * 将文件头转换成16进制字符串  
     *   
     * @param 原生byte  
     * @return 16进制字符串  
     */  
    private static String bytesToHexString(byte[] src){   
           
        StringBuilder stringBuilder = new StringBuilder();      
        if (src == null || src.length <= 0) {      
            return null;      
        }      
        for (int i = 0; i < src.length; i++) {      
            int v = src[i] & 0xFF;      
            String hv = Integer.toHexString(v);      
            if (hv.length() < 2) {      
                stringBuilder.append(0);      
            }      
            stringBuilder.append(hv);      
        }      
        return stringBuilder.toString();      
    }   
      
    /**  
     * 得到文件头  
     *   
     * @param filePath 文件路径  
     * @return 文件头  
     * @throws IOException  
     */  
    private static String getFileContent(String filePath) throws IOException {   
           
        byte[] b = new byte[28];   
           
        InputStream inputStream = null;   
           
        try {   
            inputStream = new FileInputStream(filePath);   
            inputStream.read(b, 0, 28);   
        } catch (IOException e) {   
            e.printStackTrace();   
            throw e;   
        } finally {   
            if (inputStream != null) {   
                try {   
                    inputStream.close();   
                } catch (IOException e) {   
                    e.printStackTrace();   
                    throw e;   
                }   
            }   
        }   
        return bytesToHexString(b);   
    }   
    /**  
     * 判断文件类型  
     *   
     * @param filePath 文件路径  
     * @return 文件类型  
     */  
    public static FileType getType(String filePath) throws IOException {   
           
        String fileHead = getFileContent(filePath);   
           
        if (fileHead == null || fileHead.length() == 0) {   
            return null;   
        }   
           
        fileHead = fileHead.toUpperCase();   
           
        FileType[] fileTypes = FileType.values();   
           
        for (FileType type : fileTypes) {   
            if (fileHead.startsWith(type.getValue())) {   
                return type;   
            }   
        }   
           
        return null;   
    }   
}

3. 在使用jai jar包调用时,先判断类型,再根据具体类型传递具体参数

/***
     * 将单个TIF转换为多个JPEG文件
     * @param srcFile
     * @param destFile
     * @return
     */
    private static List<String> convertMTifToMJPEG(String srcFile, String destFile) {
        List<String> jpegFiles = new ArrayList<String>() ;
         try{
             FileSeekableStream ss = new FileSeekableStream(srcFile);
             TIFFDecodeParam param0 = null;
             TIFFEncodeParam param = new TIFFEncodeParam();
             JPEGEncodeParam param1 = new JPEGEncodeParam();
             FileType fileType = FileTypeJudge.getType(srcFile);
             ImageDecoder dec = ImageCodec.createImageDecoder(fileType.toString().toLowerCase(), ss, param0);
             int count = dec.getNumPages();
             param.setCompression(TIFFEncodeParam.COMPRESSION_GROUP4);
             param.setLittleEndian(false); 
             for (int i = 0; i < count; i++) {
                 RenderedImage page = dec.decodeAsRenderedImage(i);
                 File f = new File(destFile + i + DOT + WaterMarkDownloadFileType.JPEG.name().toLowerCase());
                 ParameterBlock pb = new ParameterBlock();
                 pb.addSource(page);
                 pb.add(f.toString());
                 pb.add(WaterMarkDownloadFileType.JPEG.name());
                 pb.add(param1);
                 RenderedOp r = JAI.create("filestore",pb);
                 r.dispose();
                 jpegFiles.add(destFile + i + DOT + WaterMarkDownloadFileType.JPEG.name().toLowerCase()) ;
             }
         } catch (IOException e) {
             e.printStackTrace();
         }
         return jpegFiles;
    }


© 著作权归作者所有

上一篇: git 常用命令
下一篇: DataWorks 安装手册
遛狗少年
粉丝 2
博文 7
码字总数 6126
作品 0
海淀
程序员
私信 提问
OCR图文识别软件是怎么保存页面图像的

ABBYY FineReader作为一款OCR图文识别软件,可以保存识别的页面图像,包括扫描的文档,当文档非常大时,可以仅选取需要的页面进行保存,本文将为大家讲解如何通过ABBYY FineReader保存页面图...

ABBYY
2016/09/19
17
0
Tesseract-OCR4.0识别中文与训练字库实例

关于中文的识别,效果比较好而且开源的应该就是Tesseract-OCR了,所以自己亲身试用一下,分享到博客让有同样兴趣的人少走弯路。 文中所用到的身份证图片资源是百度找的,如有侵权可联系我删除...

---dgw博客
2018/04/06
0
0
将java库转换为.net库

【转载请注明出处】 动机: 充分利用java阵营众多的类库 工具: IKVM――把java bytecode 转换成IL程序,并提供大部分J2SE 1.4类的.net实现(IKVM.GNU.Classpath.dll) winrar――提取jar,打...

最美的回忆
2017/11/20
0
0
文件优化工具--FileOptimizer

FileOptimizer 是通过无损压缩技术来减少许多普遍的文件类型文件的大小(AIR, APK, APNG APPX, BMP, CBZ, DOCX, DLL, EPUB, EXE, GIF, GZ, ICO, JAR, JPEG, MNG, MP3, MPP, PNG, PPTX, ODT, O......

叶秀兰
2014/09/18
411
0
OpenCV支持的图像格式

OpenCV目前支持的图像格式包括: Windows位图文件 - BMP, DIB; JPEG文件 - JPEG, JPG, JPE; 便携式网络图片 - PNG; 便携式图像格式 - PBM,PGM,PPM; Sun rasters - SR,RAS; TIFF文件 ...

moki_oschina
2016/05/20
35
0

没有更多内容

加载失败,请刷新页面

加载更多

springmvc java对象转json,上传下载(未完)拦截器Interceptor以及源码解析(未完待续)

package com.atguigu.my.controller;import java.util.Collection;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Contr......

architect刘源源
今天
28
0
[日更-2019.5.24、25、26] Android系统中的Binder通信机制分析(一)--servicemanager

声明 其实对于Android系统Binder通信的机制早就有分析的想法,记得去年6、7月份Mr.Deng离职期间约定一起对其进行研究的,但因为我个人问题没能实施这个计划,留下些许遗憾... 最近,刚好在做...

Captain_小馬佩德罗
昨天
24
0
聊聊dubbo的DataStore

序 本文主要研究一下dubbo的DataStore DataStore dubbo-2.7.2/dubbo-common/src/main/java/org/apache/dubbo/common/store/DataStore.java @SPI("simple")public interface DataStore { ......

go4it
昨天
3
0
17.windows上安装kafka并简单应用

参考:https://blog.csdn.net/yao8513277/article/details/81116718 1.单机版 1.1 安装jdk 略 1.2 安装zookeeper https://my.oschina.net/springMVCAndspring/blog/3045210 1.3 安装window上......

20190513
昨天
2
0
缓存雪崩

缓存雪崩原因:大批次的缓存数据,同一时刻过期 解决方案: 1、尽可能避免所有缓存在同一时刻过期,即:合理调整过期策略 2、对条件加锁 伪代码: public ProductselectProduct(String id){ ...

少年已不再年少
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部