一、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;}

四、踩坑点

  1. jar包难找,到处都收费;解决办法:见本文底部
  2. 8位深度的图片会出现文件损坏问题;解决办法:中转一次,统一转成24位深度的JPG图片
  3. 在下载TIF图片后无法删除产生的临时文件,RenderedOp资源被占用无法删除问题;解决办法:见上面工具类

github地址:图片转TIFF格式工具类源码及jar包

Java实现图片(jpg/png)转成TIF格式(300dpi)踩坑笔记相关推荐

  1. java将图片的url转换成File,File转换成二进制流byte

    package com.xqy;import java.io.*; import java.net.HttpURLConnection; import java.net.URL; //java将图片的 ...

  2. java实现图片jpg批量转换成pdf

    java实现图片jpg批量转换成pdf package jpgTopdf; import java.awt.image.BufferedImage; import java.io.File; impo ...

  3. 在java中如何把字符串转换成时间格式?

    在java中如何把字符串转换成时间格式? 检举 | 2007-11-28 17:26 提问者:baixiao429 | 悬赏分:20 | 浏览次数:6645次 有这样一个字符串:"20070 ...

  4. 图片png怎么转成pdf格式?

    图片png怎么转成pdf格式?相信很多上班的小伙伴们都会遇到类似的问题,需要将公司的图片宣传册等资料发送给客户,但是公司宣传册本身是一页一页的图片文件,如果这样发送了就显得很不专业或者说比较杂乱!所以 ...

  5. 图片怎么在线转换成PDF格式

    图片怎么在线转换成PDF格式,图片转换成PDF文件的本质就是将一些图片文件合并成一个PDF格式的文档,那如何进行这一操作的呢,今天就让小编来教教你. 步骤一:打开浏览器,进入百度首页,搜索迅捷PDF在 ...

  6. 图片该如何转换成Word格式

    2019独角兽企业重金招聘Python工程师标准>>> 办公学习中我们常常会利用扫描仪扫描一本书或者杂志的某篇文章,这样扫描出来后就是一张图片格式,甚至有时候直接就是一份图片格式的文 ...

  7. Java踩坑笔记 —— base64转换为图片后图片显示不全

    Java踩坑笔记 -- base64转换为图片后图片显示不全 前言 解决思路 案例代码 结束语 前言 最近在开发项目中,发现base64转换图片时,出现了图片显示不全,例如如下这样 可以明显看到图片部 ...

  8. 「Java」基于Mirai的qq机器人开发踩坑笔记(其二)

    目录 0. 配置机器人 1. onLoad方法 2. onEnable方法 3. 消息属性 4. 消息监听 I. 好友消息 II. 群聊消息 III. 无差别消息 5. 发送消息 I. 文本消息 II ...

  9. 「Java」基于Mirai的qq机器人开发踩坑笔记(其一)

    目录 0. 前置操作 I. 安装MCL II. MCL自动登录配置 III. 安装IDEA插件 1. 新建Mirai项目 2. 编写主类 3. 添加外部依赖 4. IDEA运行 5. 插件打包 6. ...

最新文章

  1. python统计窗口函数怎么处理_python移动窗口函数
  2. 软件开发和产品经理到底是怎么回事
  3. 微服务架构到底是什么鬼?
  4. 宁夏大学新华学院08计算机马宁,公 示
  5. 去中心化索引协议The Graph将于12月上线主网
  6. 十进制度分秒lisp函数_十进制与度分秒坐标互转
  7. Kompose: Docker-compose 到 Kubernetes 的迁移工具
  8. AttributeError: module ‘matplotlib‘ has no attribute ‘image‘
  9. 修炼Python基础篇-字典(Dictionary)学习
  10. 蚂蚁区块链第1课 蚂蚁10大区块链解决方案及应用场景
  11. 如何使用Arduino 舵机SG90
  12. 【猿如意】中的『XMind』工具详情介绍
  13. str.substring() 的用法
  14. K近邻算法(k-nearest neighbor,KNN)
  15. 2019年最新出搜索引擎蜘蛛网页爬虫大全
  16. GIS地图坐标系转换方法,快快收藏
  17. Internet Download Manager2022完整版安装下载教程
  18. php制作轮播图,图片轮播效果怎么实现
  19. matlab对图像进行KL变换,kl变换特征提取
  20. Docker curriculum (3): 多容器环境

热门文章

  1. 班主任老师推荐这些优质的教育号,建议家长们多阅读!
  2. 开拓大脑,思维upup(1)——赛马找最快
  3. 电脑装机电源功率怎么选择?
  4. 爱鸿森谈批发商需求的特点
  5. 双色球python最简单的写法,python编写一个双色球
  6. 如何查看IEDA到期时间
  7. Surface Shaders with DX11 / OpenGL Core Tessellation 表面着色的曲面细分 - Unity Shader Reference 系列5
  8. 最长回文子串和最长回文子序列
  9. mysql登_Mysql的登录
  10. 麒麟系统开发笔记(二):国产麒麟系统搭建Qt开发环境安装Qt5.12