tif转png

tif转png

1、ImageIO

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;

public boolean tifToPng(String tifFilePath, String dstPngPath) {
        try {
            BufferedImage bufferegImage = ImageIO.read(new File(tifFilePath));
            ImageIO.write(bufferegImage, "png", new File(dstPngPath));//可以是png等其它图片格式
            bufferegImage.flush();
            if (FileUtil.exist(dstPngPath)) {
                return true;
            }
        } catch (Exception e) {
            log.error(e.getMessage());
        }
        log.info("tif转png失败!");
        return false;
    }
<!--在java8及之前版本中,jdk中的ImageIO读取图片内容会失败,imageio-tiff可以解决这个问题,因为 ImageIO 会自动搜索类路径下继承的接口和子类,因此不需要显示调用,直接添加依赖就可以了-->
>
         >com.twelvemonkeys.imageio>
         >imageio-tiff>
         >3.4.1>
>

2、JAI

import java.io.*;
import javax.media.jai.JAI;
import javax.media.jai.RenderedOp;

import com.sun.media.jai.codec.ImageCodec;
import com.sun.media.jai.codec.ImageEncoder;
import com.sun.media.jai.codec.PNGEncodeParam;

public boolean tifToPng(String tifFilePath,String dstPngPath) {
        try {
            RenderedOp ro = JAI.create("fileload", tifFilePath);
            OutputStream os = new FileOutputStream(dstPngPath);
            PNGEncodeParam param = new PNGEncodeParam.RGB();

            ImageEncoder ie = ImageCodec.createImageEncoder("PNG", os, param);
            ie.encode(ro);
            os.flush();
            os.close();
            return true;
        } catch (Exception e) {
            log.error(e.getMessage());
        }
        log.info("tif转png失败!");
        return false;
    }
<!--jai_core和jai_codec是开源的tif转png用到的两个依赖-->
            
                javax.media
                jai_core
                1.1.3
                compile
            
            
                javax.media
                jai_codec
                1.1.3
                compile
            

注意:JAI的方式会存在资源占用问题,RenderedOp 无法释放,转换以后,源tif影像被占用无法删除。。。

你可能感兴趣的:(java,图片格式转换)