1. package util;
  2.  
  3. import java.awt.image.RenderedImage;
  4. import java.awt.image.renderable.ParameterBlock;
  5. import java.io.File;
  6. import java.io.FileNotFoundException;
  7. import java.io.FileOutputStream;
  8. import java.io.IOException;
  9. import java.io.OutputStream;
  10. import java.util.logging.Logger;
  11.  
  12. import javax.media.jai.JAI;
  13. import javax.media.jai.RenderedOp;
  14.  
  15. import com.sun.media.jai.codec.FileSeekableStream;
  16. import com.sun.media.jai.codec.ImageCodec;
  17. import com.sun.media.jai.codec.ImageDecoder;
  18. import com.sun.media.jai.codec.ImageEncoder;
  19. import com.sun.media.jai.codec.JPEGEncodeParam;
  20. import com.sun.media.jai.codec.TIFFEncodeParam;
  21.  
  22. /**
  23. *
  24. * @author 李小家
  25. *
  26. */
  27. public class ImageConvert {
  28.  
  29. private static Logger logger = Logger.getLogger(ImageConvert.class.getName());
  30.  
  31. public void tif2Jpg(String fileAbsolutePath) {
  32. if (fileAbsolutePath == null || "".equals(fileAbsolutePath.trim())){
  33. return ;
  34. }
  35. if (!new File(fileAbsolutePath).exists()){
  36. logger.info("系统找不到指定文件【"+fileAbsolutePath+"】");
  37. return ;
  38. }
  39. FileSeekableStream fileSeekStream = null;
  40. try {
  41. fileSeekStream = new FileSeekableStream(fileAbsolutePath);
  42. TIFFEncodeParam tiffEncodeParam = new TIFFEncodeParam();
  43. JPEGEncodeParam jpegEncodeParam = new JPEGEncodeParam();
  44. ImageDecoder dec = ImageCodec.createImageDecoder("tiff", fileSeekStream, null);
  45. int count = dec.getNumPages();
  46. tiffEncodeParam.setCompression(TIFFEncodeParam.COMPRESSION_GROUP4);
  47. tiffEncodeParam.setLittleEndian(false);
  48. logger.info("该tif文件共有【" + count + "】页");
  49. String filePathPrefix = fileAbsolutePath.substring(0, fileAbsolutePath.lastIndexOf("."));
  50. for (int i = 0; i < count; i++) {
  51. RenderedImage renderedImage = dec.decodeAsRenderedImage(i);
  52. File imgFile = new File(filePathPrefix + "_" + i + ".jpg");
  53. logger.info("每页分别保存至: " + imgFile.getCanonicalPath());
  54. ParameterBlock pb = new ParameterBlock();
  55. pb.addSource(renderedImage);
  56. pb.add(imgFile.toString());
  57. pb.add("JPEG");
  58. pb.add(jpegEncodeParam);
  59. RenderedOp renderedOp = JAI.create("filestore",pb);
  60. renderedOp.dispose();
  61. }
  62. } catch (IOException e) {
  63. // TODO Auto-generated catch block
  64. e.printStackTrace();
  65. } finally {
  66. if (fileSeekStream != null){
  67. try {
  68. fileSeekStream.close();
  69. } catch (IOException e) {
  70. }
  71. fileSeekStream = null;
  72. }
  73. }
  74. }
  75.  
  76. public void jpg2Tif(String fileAbsolutePath) {
  77. OutputStream outputStream = null;
  78. try {
  79. RenderedOp renderOp = JAI.create("fileload", fileAbsolutePath);
  80. String tifFilePath = fileAbsolutePath.substring(0, fileAbsolutePath.lastIndexOf("."))+".tif";
  81. outputStream = new FileOutputStream(tifFilePath);
  82. TIFFEncodeParam tiffParam = new TIFFEncodeParam();
  83. ImageEncoder imageEncoder = ImageCodec.createImageEncoder("TIFF", outputStream, tiffParam);
  84. imageEncoder.encode(renderOp);
  85. logger.info("jpg2Tif 保存至: " + tifFilePath);
  86. } catch (FileNotFoundException e) {
  87. // TODO Auto-generated catch block
  88. e.printStackTrace();
  89. } catch (IOException e) {
  90. // TODO Auto-generated catch block
  91. e.printStackTrace();
  92. } finally {
  93. if (outputStream != null){
  94. try {
  95. outputStream.close();
  96. } catch (IOException e) {
  97. }
  98. outputStream = null;
  99. }
  100. }
  101. }
  102.  
  103. public static void main(String args[]) throws Exception{
  104. ImageConvert imageConvert = new ImageConvert();
  105. /* tif 转 jpg 格式*/
  106. imageConvert.tif2Jpg("d:/TIF001.TIF");
  107. /* jpg 转 tif 格式*/
  108. imageConvert.jpg2Tif("d:/1.jpg");
  109. }
  110. }

依赖JAI 包(jai_codec.jar和jai_core.jar)

java 图片文件格式转换(多页tif转jpg 、jpg转tif)的更多相关文章

  1. c#代码 天气接口 一分钟搞懂你的博客为什么没人看 看完python这段爬虫代码,java流泪了c#沉默了 图片二进制转换与存入数据库相关 C#7.0--引用返回值和引用局部变量 JS直接调用C#后台方法(ajax调用) Linq To Json SqlServer 递归查询

    天气预报的程序.程序并不难. 看到这个需求第一个想法就是只要找到合适天气预报接口一切都是小意思,说干就干,立马跟学生沟通价格. ​ ​不过谈报价的过程中,差点没让我一口老血喷键盘上,话说我们程序猿的人 ...

  2. bmp,jpg,png,tif,wmf,emf与eps图片格式转换

    wmf/emf是两种Microsoft Windows的图形文件格式.它是一个矢量图格式,但是也允许包含位图.本质上,一个WMF文件保存一系列可以用来重建图片的Windows GDI命令.在某种程度上 ...

  3. java 实现视频转换通用工具类:获取视频元数据信息(一)

    java 做视频转换主要用到开源的ffmpeg或者mencoder,还要有MP4Box. 注:由于平时都没有时间写博客,所以思路我就不写了,有问题问我,不一定马上回复. 详细介绍: ffmpeg:ht ...

  4. simpleImageTool又纯java图片水印、缩放工具

    simpleImageTool又一个简单.好用的图片格式转换.缩放水印叠加等功能的纯Java图片工具库. simpleImageTool的由来,近期需要用到图片处理,通过网上的图片流直接进行缩放水印叠 ...

  5. 数据分析:基于Python的自定义文件格式转换系统

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  6. (9) 深入了解Java Class文件格式(八)

    转载:http://blog.csdn.net/zhangjg_blog/article/details/22205831 在本专栏的第一篇文章 深入理解Java虚拟机到底是什么 中, 我们主要讲解了 ...

  7. Atitit.java图片图像处理attilax总结

    Atitit.java图片图像处理attilax总结 BufferedImage extends java.awt.Image 获取图像像素点 image.getRGB(i, lineIndex); ...

  8. Atitit.java图片图像处理attilax总结  BufferedImage extends java.awt.Image获取图像像素点image.getRGB(i, lineIndex); 图片剪辑/AtiPlatf_cms/src/com/attilax/img/imgx.javacutImage图片处理titit 判断判断一张图片是否包含另一张小图片 atitit 图片去噪算法的原理与

    Atitit.java图片图像处理attilax总结 BufferedImage extends java.awt.Image 获取图像像素点 image.getRGB(i, lineIndex); ...

  9. C#下搭建文件格式转换服务器

    文件格式转换,相信很多涉及到office文档在线观看的都会需要,因为浏览器还不能完全支持直接打开office文档,所以很多情况下我们都需要将这些文档转换成flash能够播放的格式,但是另一个问题又来了 ...

随机推荐

  1. 上传代码到cocoapod ,自己的框架提供给开发者使用

    1.注册trunk 1 $sudo gem install cocoapods 1 pod trunk register 382782411@qq.com 'Henry519'  --verbose ...

  2. 对比iOS中的四种数据存储

    来自于大牛的文章给大家分享下 :http://www.infoq.com/cn/articles/data-storage-in-ios/

  3. java新手笔记7 找最小、最大、排序

    1.最小数 // 1.0 public class SortDemo1 { public static void main(String[] args) { int[] a = {2,5,4,6,8, ...

  4. hibernate3.0 org.dom4j.DocumentException: Connection timed out: connect Nested exception:

    hibernate3.0 org.dom4j.DocumentException: Connection timed out: connect Nested exception:   所报异常: 严重 ...

  5. UVA 11464 Even Parity(部分枚举 递推)

    Even Parity We have a grid of size N x N. Each cell of the grid initially contains a zero(0) or a on ...

  6. 学习笔记---C++析构函数心得

    1.动态分配的对象的析构函数 class man{ public: man(){ cout<<"man begin"<<endl; }; ~man(){ c ...

  7. EntityClient 介绍

    System.Data.EntityClient 命名空间是 实体框架的 .NET Framework 数据提供程序.EntityClient 提供程序使用存储特定的 ADO.NET 数据提供程序类和 ...

  8. ajax的访问 WebService 的方法

    如果想用ajax进行访问 首先在web.config里进行设置 添加在 <webServices> <protocols> <add name= "HttpPo ...

  9. docker 挂在本地目录

    docker run -i -t -v /home/:/opt/data jenkins /bin/bash    运行jenkins,把本地中的/home/   挂载到虚拟机中的/opt/data/ ...

  10. win7下简单FTP服务器搭建

    本文介绍通过win7自带的IIS来搭建一个只能实现基本功能的FTP服务器,第一次装好WIN7后我愣是没整出来,后来查了一下网上资料经过试验后搭建成功,其实原理和步骤与windows前期的版本差不多,主 ...