Java tif转jpg代码实现
近期项目需要在前端展示 tif 格式的图片,测试发现只有在 ie9以上浏览器及苹果的 Safari 浏览器上能自带支持查看 tif 图片,然而最常用的 Google Chrome浏览器上并不能正常显示。
查了各种资料后自己写了一份实现,欢迎借鉴。
public class TifFile extends FileProcess {@Overridepublic byte[] tif2JPG(byte[] buffer, InputStream inputStream, String outputFilePath) throws Exception {if(buffer==null||buffer.length==0) return null;byte[] byt = null;String jpgOutFilePath = outputFilePath.replaceAll(".tif", ".jpg");File jpgFile = new File(jpgOutFilePath);if (jpgFile.exists()) {InputStream input = new FileInputStream(jpgFile);byt = new byte[input.available()];input.read(byt);input.close();return byt;}BufferedImage bufferedImage = ImageIO.read(inputStream); // 指定写图片的方式为 jpg ImageWriter imgWrier = ImageIO.getImageWritersByFormatName("jpeg").next(); ImageWriteParam imgWriteParams = new javax.imageio.plugins.jpeg.JPEGImageWriteParam(null); // 要使用压缩,必须指定压缩方式为MODE_EXPLICIT imgWriteParams.setCompressionMode(imgWriteParams.MODE_EXPLICIT);// 这里指定压缩的程度,参数qality是取值0~1范围内, imgWriteParams.setCompressionQuality(0.5f); imgWriteParams.setProgressiveMode(imgWriteParams.MODE_DISABLED); ColorModel colorModel = ColorModel.getRGBdefault();// 指定压缩时使用的色彩模式 imgWriteParams.setDestinationType(new javax.imageio.ImageTypeSpecifier(colorModel, colorModel .createCompatibleSampleModel(16, 16))); ByteArrayOutputStream bos = new ByteArrayOutputStream(buffer.length); imgWrier.reset(); // 必须先指定 out值,才能调用write方法, ImageOutputStream可以通过任何 OutputStream构造 imgWrier.setOutput(ImageIO.createImageOutputStream(bos)); // 调用write方法,就可以向输入流写图片 imgWrier.write(null, new IIOImage(bufferedImage, null, null), imgWriteParams); bos.flush(); bos.close(); inputStream.close(); byte[] result = bos.toByteArray();outputStreamFile(result,jpgFile);return result; }public void outputStreamFile(byte[] buffer,File file) throws Exception {OutputStream os = new FileOutputStream(file);os.write(buffer);os.close();}
}
public class FileProcessUtils {public static byte[] convertToJPG(Class<?> clazz, byte[] buffer,InputStream inputStream,String outFilePath,String extension) { byte[] byt = null;try { FileProcess file = (FileProcess) Class.forName(clazz.getName()).newInstance(); if("tif".equals(extension)) {byt = file.tif2JPG(buffer, inputStream, outFilePath);}} catch (Exception e) {System.out.println(e.getMessage());} return byt;} public static void main(String[] args) throws Exception {FileInputStream fis = new FileInputStream("/Users/HJK/Downloads/abcdef.tif");byte[] buffer = new byte[fis.available()];fis.read(buffer);InputStream inputStream = new ByteArrayInputStream(buffer);convertToJPG(TifFile.class,buffer, inputStream, "/Users/HJK/Downloads/abcdef.jpg","tif");}
}
画个重点,这里需要用到 jai-imageio-core 这个包,如果缺少这个包会导致
BufferedImage bufferedImage = ImageIO.read(inputStream);
读取的 BufferedImage 是个空对象,后边会出现参数异常。具体原因因为项目时间紧,暂时没有深入研究,猜测应该是jai-imageio的作者对 ImageIO 做了一些读取 tif 的完善。
Java tif转jpg代码实现相关推荐
- 统计java文件中的代码行数
统计Java代码行数工具类 -- CodeCounterUtil.java 统计指定目录下的java文件中代码行数 -- public static int getCodeNumFromFo ...
- java主窗体设计代码_java窗体设计+GUI经典代码全放送
[实例简介] java窗体设计经典代码,手把手叫你如何设计java窗体,编写应用程序. [实例截图] [核心代码] 57641e3b-d82c-4f28-bb29-35f951c1158d └── j ...
- java精确除法计算,四舍五入 Java问题通用解决代码
java精确除法计算,四舍五入 Java问题通用解决代码 参考文章: (1)java精确除法计算,四舍五入 Java问题通用解决代码 (2)https://www.cnblogs.com/svenne ...
- python代码转成java_如何实现Java代码转换成python代码
之前小编告诉大家最初是学Java的,现在转向python,那对于两者之间有什么互通的嘛?其实有,比如可以将Java转成python代码,一起来看下吧. 首先给大家带来一组示例演示. Java代码如下: ...
- 区块链 java 开源_详细介绍Java区块链开源代码背后的内容
什么是Java区块链开源代码?它是一种分布式分类帐技术,将所有不同的属性放在一起.那么Java区块链开源代码就可以通过不同的共识机制,使所有添加的数据不变.2015年之前,估计大家都知道的区块链的申请 ...
- Java IOUtils.copy方法代码示例(亲测)
本文整理汇总了Java中org.apache.commons.io.IOUtils.copy方法的典型用法代码示例.如果您正苦于以下问题:Java IOUtils.copy方法的具体用法?Java I ...
- java 委托机制_通过反射实现Java下的委托机制代码详解
简述 一直对Java没有现成的委托机制耿耿于怀,所幸最近有点时间,用反射写了一个简单的委托模块,以供参考. 模块API public Class Delegater()//空参构造,该类管理委托实例并 ...
- java学习教程之代码块
学编程吧java学习教程之代码块发布了,欢迎通过xuebiancheng8.com来访问 java中的代码块包括下面几种: 1.普通代码块 2.构造代码块 3.静态代码块 1.普通代码块很简单看下面这 ...
- java委托机制教程_通过反射实现Java下的委托机制代码详解
简述 一直对java没有现成的委托机制耿耿于怀,所幸最近有点时间,用反射写了一个简单的委托模块,以供参考. 模块api public class delegater()//空参构造,该类管理委托实例并 ...
- 在java中写出html代码,在java里写html代码
在java里写html代码 [2021-02-09 07:31:38] 简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace("/ ...
最新文章
- codevs——2894 Txx考试(背包)
- group by 查找订单的最新状态 join
- 连接Oracle错误:800a0e7a未找到提供程序的解决
- 前端智能化的加速时刻:华为机器视觉的创新方程式
- Android AIDL示例-回调方法版
- 9273:PKU2506Tiling
- 【新媒体】现阶段新闻聚合的玩法
- 从零开始学Pytorch之数据操作
- 【HTML+CSS网页设计与布局 从入门到精通】第15章-表格格式:边距/居中/边框/折叠
- es6 数组找最大值_JavaScript(es6)数组常用的方法
- 【报告分享】与AI共进,智胜未来:智能金融联合报告-埃森哲百度.pdf
- 浅析libuv源码-获取精确时间
- java分割txt文件
- vant修改用户头像
- golang模拟抢票
- 13.爬虫训练场集成文件采集案例,来学习一下怎么实现的
- 三菱模拟量fx3u4da_FX3U-4DA使用案例三菱FX3U-4DA用户手册(模拟量控制篇) - 广州正凌...
- python爬虫精进参考答案_高校邦数据科学创新通识课【Python爬虫】课后习题答案...
- [转]彻底卸载SQL Server2014数据库(也适用于SqlServer2012)
- 中联软通企业短信中心 瑞星杀毒软件升级包
热门文章
- android发现u盘自动安装apk,安卓自动识别U盘中APK文件并进行安装操作
- php代码实现微信代扣,html5+如何通过native.js实现APP微信支付代扣签约?
- 如何扩大计算机的硬盘空间,c盘分区小了怎么扩大_电脑c盘分区空间太小如何扩大...
- 洛谷 P1878 舞蹈课(优先队列 + 双链表)
- 拥抱“互联网+”,开拓渠道发展新业态
- 移动硬盘备份linux系统盘,Ubuntu 系统备份到移动硬盘(tar) 还原到另一台电脑
- jd页面与tianmao页面模仿jsonp跨域
- luogu p4556 [Vani有约会]雨天的尾巴 树上差分,最近公共祖先,线段树合并
- 光线追踪渲染技术能听懂的介绍
- 吉几三的俺ら东京さ行ぐだ歌词