JAVA分割多页tif文件
博客专区 > wsqzz 的博客 > 博客详情
JAVA分割多页tif文件
wsqzz 发表于5年前
JAVA分割多页tif文件
  • 发表于 5年前
  • 阅读 2303
  • 收藏 9
  • 点赞 0
  • 评论 3

腾讯云 新注册用户 域名抢购1元起>>>   

最近由于工作原因,客户发了一些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

共有 人打赏支持
粉丝 7
博文 6
码字总数 3132
评论 (3)
dunhanson
博主你好!JAI有没有区间拆分多页tif的功能?因为我的需求不是拆分所有图片,比如说:一个500页的多页TIF我需要把其的1-3页拆分成一份,4-15拆分成一份...
wsqzz

引用来自“dunhanson”的评论

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

没有尝试过你的需求,算法上考率单页分离后,按序号多图合并
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
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: