Java实现图片(jpg/png)转成TIF格式(300dpi)踩坑笔记
一、TIF/TIFF介绍
引用百度百科的一句话总结:
标签图像文件格式(Tag Image File Format,简写为TIFF)是一种灵活的位图格式,主要用来存储包括照片和艺术图在内的图像。
二、转换TIF所需要的jar包
需要3个jar包:
jai_core-1.1.3.jar
jai_imageio.jar
jai-codec-1.1.3.jar
下载地址请见文章在最底部。
三、使用Java转成TIF格式的工具类
3.1 工具类介绍:
传入文件的绝对路径,返回的是一个TIF格式dpi为300的图片路径,dpi可以自己设置值。
其中有遇到图片位深度为8位的图片无法转换,所以多加了一个filterFilePath,用于过滤一次,统一转换成位深度为24的JPG图片,然后再进行TIF编码。
3.2 工具类如下:
/**** 功能描述: 图片转tif格式** @param: [fileAbsolutePath]* @return: java.lang.String 转成TIF图片的地址全路径* @auther: KevinZc* @date: 2018/9/8 22:14*/public String image2Tif(String fileAbsolutePath){OutputStream outputStream = null;String filterFilePath = null;String tifFilePath = null;ImageOutputStream ios = null;try {// 解决位深度太小 start ====注意:8位深度的图片会出现文件损坏问题File picture = new File(fileAbsolutePath);// 统一进行一次过滤 转换成24位深度filterFilePath = fileAbsolutePath.substring(0, fileAbsolutePath.lastIndexOf("."))+".JPG";tifFilePath = filterFilePath.substring(0, filterFilePath.lastIndexOf("."))+".tif";ios = ImageIO.createImageOutputStream(new File(filterFilePath));ImageIO.write(ImageIO.read(picture),"JPG", ios);// 解决位深度太小 endFileSeekableStream stream = new FileSeekableStream(filterFilePath);PlanarImage in = JAI.create("stream", stream);OutputStream os = null;os = new FileOutputStream(tifFilePath);// 设置dpi为300TIFFEncodeParam param = new TIFFEncodeParam();param.setCompression(TIFFEncodeParam.COMPRESSION_NONE);TIFFField[] extras = new TIFFField[2];extras[0] = new TIFFField(282, TIFFTag.TIFF_RATIONAL, 1, (Object) new long[][]{{(long) 300, 1}, {0, 0}});
// extras[0] = new TIFFField(282, TIFFTag.TIFF_RATIONAL, 1, (Object) new long[][]{{(long) dpi, 1}, {0, 0}});extras[1] = new TIFFField(283, TIFFTag.TIFF_RATIONAL, 1, (Object) new long[][]{{(long) 300, 1}, {0, 0}});param.setExtraFields(extras);TIFFImageEncoder enc = new TIFFImageEncoder(os, param);try {enc.encode(in);os.flush();os.close();stream.close();} catch (Exception e) {logger.error("{}",e );throw new RuntimeException(e);}return tifFilePath;} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try {if (outputStream != null) {outputStream.close();}if (ios != null) {ios.close();}} catch (IOException e) {e.printStackTrace();}}return null;}
四、踩坑点
- jar包难找,到处都收费;解决办法:见本文底部
- 8位深度的图片会出现文件损坏问题;解决办法:中转一次,统一转成24位深度的JPG图片
- 在下载TIF图片后无法删除产生的临时文件,RenderedOp资源被占用无法删除问题;解决办法:见上面工具类
github地址:图片转TIFF格式工具类源码及jar包
Java实现图片(jpg/png)转成TIF格式(300dpi)踩坑笔记相关推荐
- java将图片的url转换成File,File转换成二进制流byte
package com.xqy;import java.io.*; import java.net.HttpURLConnection; import java.net.URL; //java将图片的 ...
- java实现图片jpg批量转换成pdf
java实现图片jpg批量转换成pdf package jpgTopdf; import java.awt.image.BufferedImage; import java.io.File; impo ...
- 在java中如何把字符串转换成时间格式?
在java中如何把字符串转换成时间格式? 检举 | 2007-11-28 17:26 提问者:baixiao429 | 悬赏分:20 | 浏览次数:6645次 有这样一个字符串:"20070 ...
- 图片png怎么转成pdf格式?
图片png怎么转成pdf格式?相信很多上班的小伙伴们都会遇到类似的问题,需要将公司的图片宣传册等资料发送给客户,但是公司宣传册本身是一页一页的图片文件,如果这样发送了就显得很不专业或者说比较杂乱!所以 ...
- 图片怎么在线转换成PDF格式
图片怎么在线转换成PDF格式,图片转换成PDF文件的本质就是将一些图片文件合并成一个PDF格式的文档,那如何进行这一操作的呢,今天就让小编来教教你. 步骤一:打开浏览器,进入百度首页,搜索迅捷PDF在 ...
- 图片该如何转换成Word格式
2019独角兽企业重金招聘Python工程师标准>>> 办公学习中我们常常会利用扫描仪扫描一本书或者杂志的某篇文章,这样扫描出来后就是一张图片格式,甚至有时候直接就是一份图片格式的文 ...
- Java踩坑笔记 —— base64转换为图片后图片显示不全
Java踩坑笔记 -- base64转换为图片后图片显示不全 前言 解决思路 案例代码 结束语 前言 最近在开发项目中,发现base64转换图片时,出现了图片显示不全,例如如下这样 可以明显看到图片部 ...
- 「Java」基于Mirai的qq机器人开发踩坑笔记(其二)
目录 0. 配置机器人 1. onLoad方法 2. onEnable方法 3. 消息属性 4. 消息监听 I. 好友消息 II. 群聊消息 III. 无差别消息 5. 发送消息 I. 文本消息 II ...
- 「Java」基于Mirai的qq机器人开发踩坑笔记(其一)
目录 0. 前置操作 I. 安装MCL II. MCL自动登录配置 III. 安装IDEA插件 1. 新建Mirai项目 2. 编写主类 3. 添加外部依赖 4. IDEA运行 5. 插件打包 6. ...
最新文章
- python统计窗口函数怎么处理_python移动窗口函数
- 软件开发和产品经理到底是怎么回事
- 微服务架构到底是什么鬼?
- 宁夏大学新华学院08计算机马宁,公 示
- 去中心化索引协议The Graph将于12月上线主网
- 十进制度分秒lisp函数_十进制与度分秒坐标互转
- Kompose: Docker-compose 到 Kubernetes 的迁移工具
- AttributeError: module ‘matplotlib‘ has no attribute ‘image‘
- 修炼Python基础篇-字典(Dictionary)学习
- 蚂蚁区块链第1课 蚂蚁10大区块链解决方案及应用场景
- 如何使用Arduino 舵机SG90
- 【猿如意】中的『XMind』工具详情介绍
- str.substring() 的用法
- K近邻算法(k-nearest neighbor,KNN)
- 2019年最新出搜索引擎蜘蛛网页爬虫大全
- GIS地图坐标系转换方法,快快收藏
- Internet Download Manager2022完整版安装下载教程
- php制作轮播图,图片轮播效果怎么实现
- matlab对图像进行KL变换,kl变换特征提取
- Docker curriculum (3): 多容器环境
热门文章
- 班主任老师推荐这些优质的教育号,建议家长们多阅读!
- 开拓大脑,思维upup(1)——赛马找最快
- 电脑装机电源功率怎么选择?
- 爱鸿森谈批发商需求的特点
- 双色球python最简单的写法,python编写一个双色球
- 如何查看IEDA到期时间
- Surface Shaders with DX11 / OpenGL Core Tessellation 表面着色的曲面细分 - Unity Shader Reference 系列5
- 最长回文子串和最长回文子序列
- mysql登_Mysql的登录
- 麒麟系统开发笔记(二):国产麒麟系统搭建Qt开发环境安装Qt5.12