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);
}
}
}
}
【JAVA读取tiff文件,转换为单张或多张png格式图片(亲测实用)】代码亲测有效,转换后的png图片只有200K左右,如果你也有同样的需求,希望这篇文章可以帮助到你~
如有不足之处欢迎斧正
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 事件代理
- Java|Java OpenCV图像处理之SIFT角点检测详解
- java中如何实现重建二叉树
- 数组常用方法一
- 【Hadoop踩雷】Mac下安装Hadoop3以及Java版本问题
- Java|Java基础——数组
- RxJava|RxJava 在Android项目中的使用(一)
- java之static、static|java之static、static final、final的区别与应用
- Java基础-高级特性-枚举实现状态机