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

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;
    }
时间: 2024-11-07 00:17:26

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

WINDOWS下cocostudio头文件报错解决办法

感谢这个作者的参考:http://www.itnose.net/detail/6099109.html Cocos2d-x 3.2 学习日志,移植出现error C1083: 无法打开包括文件:"extensions/ExtensionMacros.h": No such file 或者 无法打开包括文件:"cocostudio/cocostudio.h": No such file 今天在做Mac下3.2移植到windows平台的时候候导入扩展包出现了错误,经过多

安装wps导致 application/kset 上传文件类型报错解决办法

电脑中安装wps上传execl时,上传.xls文件时 报错 application/kset 文件类型不正确 打印array() print_r($_FILES ) 结果如下: Array ( [userfile] => Array ( [name] => Template.xls[type] => application/kset[tmp_name] => C:\\Windows\\temp\\phpACC.tmp [error] => 0 [size] => 768

Tomcat启动报错java.net.AbstractPlainSocketImpl(java/net/AbstractPlainSocketImpl.java:178:-1)Struts在网络复杂情况下启动报错解决办法

SSH项目 在网络复杂的情况(具体规律未知)下,Tomcat启动时,报如下错误: [ERROR] 2014-08-12 14:52:58,484 [org.apache.struts2.dispatcher.Dispatcher :27] - Dispatcher initialization failedUnable to load configuration. - Class: java.net.AbstractPlainSocketImplFile: AbstractPlainSocket

springboot x.x.x RELEASE pom 第一行报错解决办法

springboot x.x.x RELEASE pom 第一行报错解决办法 在pom.xml 文件的properties中加入maven jar插件的版本号 <properties> <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version> </properties> 再在项目右键maven ,update project 更新项目即可 原文地址:https://www.cnblogs.com/Y

C-FREE5 出现 ld.exe报错 解决办法

因为入门是接触了C free,发现是蛮不错的一个IDE,但是用了很久一段时间之后,安装了MinGW发现不能用了.. 出问题之后换用了sublime text顶替了一段时间,今天闲着无聊,修理了下c-free,发现网上出同类问题的人还是蛮多的,现把问题及答案留在这里, 如果没能帮到你还请原谅 ^_^ 状况1:正常运行程序时偶尔会冒出ld.exe,如图: 此处强调的出现频率是 偶尔 ,素以具体报什么错已经记不清了,但是解决方法是这样的,ctrl+alt+delete,蓝后点任务管理器, 蓝后在进程里

Nodejs npm安装socket.io报错解决办法

安装socket.io时,报错,提示需要安装Microsoft visual studio 2005 或 Net framework 2.0 sdk,没有找到vcbuild.exe,解决办法是安装 .NET Framework 2.0 Software Development Kit (SDK) http://www.microsoft.com/en-us/download/details.aspx?id=15354 并将 C:\Program Files\Microsoft Visual St

使用Android Studio打开eclipse项目以及打开网上下载的studio项目报错解决办法

第一次使用markdown来写博客,不熟悉使用markdown用法的可以参考视频教程(http://edu.csdn.net/course/detail/508/) 下面来介绍一下标题的题目,之前刚接触Android Studio也是一头雾水,在此写下来和大家分享:] (一) . Andriod Studio下载网址:http://www.androiddevtools.cn/(好多最新开发工具)可以找到最新的稳定版本的zip压缩包,解压后就可以直接用,关联之前本地的SDK即可. (二). St

最新版ADT新建项目报错解决办法(三)

自从在谷歌官网下载了最新版的ADT,版本号version:23.0.2.1259578,集成版的(adt-bundle-windows-x86-20140702.rar).笔者就走上了与报错斗争的道路,新建项目时总无故报错,提示内容为: [2014-12-11 09:46:50 - test] E:\workspace\test\res\values\styles.xml:7: error: Error retrieving parent for item: No resource found

PHP多次调用Mysql存储过程报错解决办法

PHP多次调用Mysql数据库的存储过程会出现问题,主要问题为存储过程中执行多次SQL语句不能一一释放导致的,网上找了一些解决办法,比如使用 multi_query 然后一个一个释放,但是发现根本不适合我们的项目,我们使用CI框架写的,更多的是使用CI的数据库处理方法.所以只能另辟蹊径. 一次偶然,把Mysql链接方式改成了mysqli,两种不同的PHP连接mysql的扩展,官方在高版本中推荐使用mysqli,结果却奇迹般好了,使用Mysql长连接也行,天意么? PHP多次调用Mysql存储过程