文档章节

JAVA分割多页tif文件

wsqzz
 wsqzz
发布于 2013/06/05 14:15
字数 251
阅读 6.2K
收藏 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
郑州
部门经理
私信 提问
加载中

评论(4)

逍遥乐
逍遥乐
博主,请问把tiff拆分后,每一个tiff文件更大了,怎么处理?
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-04-使用 jTessBoxEditor 进行训练

Tesseract-OCR-04-使用 jTessBoxEditor 进行训练 本篇是关于 jTessBoxEditor 进行训练,使 Tesseract-OCR 文字识别准确率得到极大的提高,本篇完善了很多细节,初学者也可以看懂,一起学习吧...

osc_n5vrwm1c
2018/09/07
5
0
深入学习Tesseract-ocr识别中文并训练字库的方法

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

战争热诚
2018/08/14
0
0
OCR库Tesseract初探

1.Tesseract 安装及使用 一款由HP实验室开发由Google维护的开源OCR(Optical Character Recognition , 光学字符识别)引擎,与Microsoft Office Document Imaging(MODI)相比,我们可以不断...

osc_fxh4yhsp
2019/04/25
5
0
Tesseract-OCR的简单使用与训练

Tesseract-OCR的简单使用与训练 Tesseract,一款由HP实验室开发由Google维护的开源OCR(Optical Character Recognition , 光学字符识别)引擎,与Microsoft Office Document Imaging(MODI)...

osc_3g985sb6
2018/10/17
8
0
tesseract系列(3) -- tesseract训练

tessract的训练有个工具叫 jTessBoxEditor 1、jTessBoxEditor是用java写的,首先要装java的环境 jdk-8u191-windows-x64.exe 这个我想从官网下载来的,但是一直失败,直接从搞java的同事那里要...

osc_6pkt76kw
2019/11/08
4
0

没有更多内容

加载失败,请刷新页面

加载更多

websocket实现一个聊天室

上次讲了websoket的基础知识和应用插件,今天我们来用websocket来实现一个聊天程序。先看几张界面截图: 聊天界面: 历史消息查看: 用户上线提醒: 在线体验地址:地址 功能结构图 可以看到...

osc_k1o54uky
41分钟前
25
0
gvim的基本配置(中文乱码,行号和主题)

在C:\Program Files\Vim目录下的 _vimrc文件中,插入基本配置,包括中文乱码,行号和主题。 " Vim with all enhancementssource $VIMRUNTIME/vimrc_example.vim" 解决中文乱码set encodi......

osc_jcfo5qp3
42分钟前
15
0
cad版本转换器哪一款好用?DWG和DXF文件如何互转?

很多工作者在工作时发现,有时候自己接收到一个文件,点击打开时发现打不开,显示文件格式不对,遇见这样的情况就需要把文档转换成自己常用的文件格式。只有经过转换过的图才能打开查看,那么...

真不莲
42分钟前
20
0
C++类中引用成员和常量成员的初始化(初始化列表)

如果一个类是这样定义的: Class A{ public: A(int pram1, int pram2, int pram3); privite: int a; int &b; const int c; } ......

osc_y9y4gqxx
43分钟前
23
0
三年OI——我的初中信竞生涯

目录 前言 Part 1 Part 2 Part 3 Part 4 Part 5 Part 6 后记 前言 OI至今已三年,小记一则,兼怀往事 文采不加,文章不伦不类,愧对语文老师 Part 1 初一上学期时,家父听说\(xzy\)(学长)得...

osc_9fexqrfv
44分钟前
24
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部