文档章节

JAVA分割多页tif文件

wsqzz
 wsqzz
发布于 2013/06/05 14:15
字数 251
阅读 2361
收藏 9

最近由于工作原因,客户发了一些tif格式的文件,使用window xp自带的图片查看器,只能打开第一页面,看着十分不方便,就在网上查了些资料,找到了一个用java分割tif多页文件的源码,分享一下。

源码如下:


package com.wsq.tif;

import java.io.*;
import com.sun.media.jai.codec.FileSeekableStream;
import com.sun.media.jai.codec.ImageDecoder;
import com.sun.media.jai.codec.ImageCodec;
import com.sun.media.jai.codec.TIFFEncodeParam;
import com.sun.media.jai.codec.TIFFDecodeParam;
import com.sun.media.jai.codec.JPEGEncodeParam;
 
import java.awt.image.RenderedImage;
import javax.media.jai.RenderedOp;
import javax.media.jai.JAI;
import java.awt.image.renderable.ParameterBlock;

public class MultiPageRead {
    public static void main(String[] args) throws IOException {
        new MultiPageRead().doitJAI();
    }
 
    public void  doitJAI() throws IOException {
        FileSeekableStream ss = new FileSeekableStream("F:/test2.tif");
        TIFFDecodeParam param0 = null;
        TIFFEncodeParam param = new TIFFEncodeParam();
        JPEGEncodeParam param1 = new JPEGEncodeParam();
        ImageDecoder dec = ImageCodec.createImageDecoder("tiff", ss, param0);
        int count = dec.getNumPages();
        param.setCompression(TIFFEncodeParam.COMPRESSION_GROUP4);
        param.setLittleEndian(false); // Intel
        System.out.println("This TIF has " + count + " image(s)");
        for (int i = 0; i < count; i++) {
            RenderedImage page = dec.decodeAsRenderedImage(i);
            File f = new File("f:/tif/page_" + (i+1) + ".jpg");
            System.out.println("Saving " + f.getCanonicalPath());
            ParameterBlock pb = new ParameterBlock();
            pb.addSource(page);
            pb.add(f.toString());
            pb.add("JPEG");
            pb.add(param1);
            RenderedOp r = JAI.create("filestore",pb);
            r.dispose();
        }
    }
}

此类运行依赖三个JAI包,费了不少劲才找到,共享出来

jai_codec.jar,jai_core.jar,mlibwrapper_jai.jar

源码和lib包下载连接:http://pan.baidu.com/s/1eQiUFuy

© 著作权归作者所有

共有 人打赏支持
wsqzz
粉丝 6
博文 6
码字总数 3132
作品 0
郑州
部门经理
加载中

评论(3)

dongjssdsdu
dongjssdsdu
博主,你好!
我在执行 RenderedImage page = dec.decodeAsRenderedImage(i);报错
Exception in thread "main" java.lang.RuntimeException: Unsupported combination of photometric interpretation, samples per pixel, and bit depth.
博主遇到过吗?
wsqzz
wsqzz

引用来自“dunhanson”的评论

博主你好!JAI有没有区间拆分多页tif的功能?因为我的需求不是拆分所有图片,比如说:一个500页的多页TIF我需要把其的1-3页拆分成一份,4-15拆分成一份...

没有尝试过你的需求,算法上考率单页分离后,按序号多图合并
dunhanson
dunhanson
博主你好!JAI有没有区间拆分多页tif的功能?因为我的需求不是拆分所有图片,比如说:一个500页的多页TIF我需要把其的1-3页拆分成一份,4-15拆分成一份...
深入学习Tesseract-ocr识别中文并训练字库的方法

  上篇文章简单的学习了tesseract-ocr识别图片中的英文(链接地址如下:https://www.cnblogs.com/wj-1314/p/9428909.html),看起来效果还不错,所以这篇文章继续深入学习tesseract-ocr识别...

战争热诚
08/14
0
0
每日一则 Linux Shell命令

find . -iname '.java' -exec wc -l {} ; | sort -n | cut --delimiter=. -f 1 | awk '{s+=$1}END{print s}' find . 查询当前目录 -iname 查询文件名,并忽略大小写 '.java' 涉及到一点点正则......

zxmit
2015/02/06
0
0
MacBook从零开始搭建java环境

新拿到到电脑,需要从零开始搭建Java开发环境,所以就把自己的操作步骤记录下来,其实很简单,就是有些细节需要注意。 1. Oracle官网下载jdk,推荐稳定版Jdk8 : http://www.oracle.com/tech...

还是要坚强
08/23
0
0
java中 split方法的使用须知

详细出处参考:http://www.freezq.cn/article/380.htm java中的split函数和js中的split函数不一样。 Java中的我们可以利用split把字符串按照指定的分割符进行分割,然后返回字符串数组,下面...

手绘灿烂
2014/04/22
0
0
第一个博客写一个完整的hadoop伪分布模式平台搭建

虚拟机的安装度娘有大量的教程,在这里不多讲,直接上干货 先做一些准备工作: 下载jdk:http://www.oracle.com/technetwork/java/javase/downloads/index.html 下载Hadoop安装包:去阿帕奇官...

weixin_41211726
04/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql 数据类型及占用字节数

数字类型 TINYINT                           1 字节 SMALLINT                          2 个字节 MEDIUMINT                         3 个字节...

会游泳的鱼_
43分钟前
3
0
高性能mysql:创建高性能的索引

性能优化简介 MySQL性能定义为完成某件任务所需要的时间量度,换句话说,性能即响应时间,这是一个非常重要的原则。我们通过任务和时间而不是资源来测量性能。数据库服务器的目的是执行SQL语...

背后的辛酸
58分钟前
4
0
HTTP get、post 中请求json与map传参格式

import java.io.IOException;import java.net.URI;import java.net.URISyntaxException;import java.nio.charset.Charset;import java.util.ArrayList;import java.util.List;im......

寒风中的独狼
今天
3
0
IDEA中tomcat启动慢 耗时10分钟

用idea中的tomcat以debug模式启动,会非常的慢,而正常启动没啥问题;原因是debug模式中View Breakpoints断点代码,断点的是jar包,而现在启动由于jar包发生变化,导致启动时一直处于等待中。...

GoodMarver
今天
5
0
Linux学习-10月18(awk)

9.6/9.7 awk 一、awk简介   1. awk是一种编程语言,用于对文本和数据进行处理的   2. 具有强大的文本格式化能力   3. 利用命令awk,可以将一些文本整理成为我们想要的样子   4. 命令awk...

wxy丶
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部