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 会自动搜索类路径下继承的接口和子类,因此不需要显示调用,直接添加依赖就可以了-->
<dependency>
<groupId>com.twelvemonkeys.imageio</groupId>
<artifactId>imageio-tiff</artifactId>
<version>3.4.1</version>
</dependency>
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用到的两个依赖-->
<dependency>
<groupId>javax.media</groupId>
<artifactId>jai_core</artifactId>
<version>1.1.3</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>javax.media</groupId>
<artifactId>jai_codec</artifactId>
<version>1.1.3</version>
<scope>compile</scope>
</dependency>
注意:JAI的方式会存在资源占用问题,RenderedOp 无法释放,转换以后,源tif影像被占用无法删除。。。