JAVA读取tiff文件,转换为单张或多张png格式图片(亲测实用)

最近遇到一个需求,需要把扩展名为.tif的文件转为png图片。至于什么是tiff,可以点击tiff介绍查看。
很多tiff转png的代码,有的是只能转一张png,有的是转成png后图片很大(一张png图片就高达6M),这些显然都不能满足需求。
最后,以下这段代码实现了我的需求。代码如下:

import com.sun.media.jai.codec.*;

import javax.media.jai.JAI;
import java.awt.image.RenderedImage;
import java.awt.image.renderable.ParameterBlock;
import java.io.File;
import java.io.IOException;

public class Test {
    public static void tifToPng(File tif) throws IOException {
        if (null != tif && tif.exists()) {
            //获取tif文件不带后缀的文件名
            String fileNameIgnore = tif.getName().replaceAll("[.][^.]+$", "");
            TIFFDecodeParam param0 = null;
            TIFFEncodeParam param = new TIFFEncodeParam();
            JPEGEncodeParam param1 = new JPEGEncodeParam();
            ImageDecoder dec = ImageCodec.createImageDecoder("tiff", tif, param0);
            int count = dec.getNumPages();
            param.setCompression(TIFFEncodeParam.COMPRESSION_GROUP4);
            param.setLittleEndian(false);
            System.out.println(tif.getName() + "文件含有" + count + "张图片");
            for (int i = 0; i < count; ) {
                RenderedImage page = dec.decodeAsRenderedImage(i);
                //转换后的png图片存储路径,这里设置为tif同级目录。可根据需要修改
                StringBuffer pngPath = new StringBuffer(tif.getParent()).append(File.separator).append(fileNameIgnore);
                if (count > 1) {
                    pngPath.append("(").append(++i).append(")");        //大于一张,用(1),(2)...区分
                }
                pngPath.append(".png");                                 //png格式
                File pngFile = new File(pngPath.toString());
                System.out.println("转换后png图片路径:" + pngFile.getCanonicalPath());
                ParameterBlock pb = new ParameterBlock();
                pb.addSource(page);
                pb.add(pngFile.toString());
                pb.add("JPEG");
                pb.add(param1);
                JAI.create("filestore", pb);
            }
        }
    }
}

代码亲测有效,转换后的png图片只有200K左右,如果你也有同样的需求,希望这篇文章可以帮助到你~
如有不足之处欢迎斧正

你可能感兴趣的:(JAVA读取tiff文件,转换为单张或多张png格式图片(亲测实用))