jdk1.5之前的不支持PNG格式的图片,之后支持,下面先来一个传进文件传出文件方式的:

public static void main(String[] args)  {  if(compressPic("D:/Program Files/myftp/1.tif", "D:/Program Files/myftp/ssss.jpg"))  {  System.out.println("压缩成功!");   }  else  {  System.out.println("压缩失败!");   }  }  public static boolean compressPic(String srcFilePath, String descFilePath)  {  File file = null;  BufferedImage src = null;  FileOutputStream out = null;  ImageWriter imgWrier;  ImageWriteParam imgWriteParams;  // 指定写图片的方式为 jpg  imgWrier = ImageIO.getImageWritersByFormatName("jpg").next();  imgWriteParams = new javax.imageio.plugins.jpeg.JPEGImageWriteParam(null);  // 要使用压缩,必须指定压缩方式为MODE_EXPLICIT  imgWriteParams.setCompressionMode(imgWriteParams.MODE_EXPLICIT);  // 这里指定压缩的程度,参数qality是取值0~1范围内,  imgWriteParams.setCompressionQuality((float)0.1);  imgWriteParams.setProgressiveMode(imgWriteParams.MODE_DISABLED);  ColorModel colorModel = ColorModel.getRGBdefault();  // 指定压缩时使用的色彩模式  imgWriteParams.setDestinationType(new javax.imageio.ImageTypeSpecifier(colorModel, colorModel  .createCompatibleSampleModel(16, 16)));  try  {  if(StringUtils.isBlank(srcFilePath))  {  return false;  }  else  {  file = new File(srcFilePath);  src = ImageIO.read(file);  out = new FileOutputStream(descFilePath);  imgWrier.reset();  // 必须先指定 out值,才能调用write方法, ImageOutputStream可以通过任何 OutputStream构造  imgWrier.setOutput(ImageIO.createImageOutputStream(out));  // 调用write方法,就可以向输入流写图片  imgWrier.write(null, new IIOImage(src, null, null), imgWriteParams);  out.flush();  out.close();  }  }  catch(Exception e)  {  e.printStackTrace();  return false;  }  return true;  }  

下面是传进byte[],传出byte[]数组的,稍微修改即可即可,(data为传过来的byte[]数组)

ByteArrayInputStream is = new ByteArrayInputStream(data);  BufferedImage src = null;
ByteArrayOutputStream out = null;
ImageWriter imgWrier;
ImageWriteParam imgWriteParams;  // 指定写图片的方式为 jpg
imgWrier = ImageIO.getImageWritersByFormatName("jpg").next();
imgWriteParams = new javax.imageio.plugins.jpeg.JPEGImageWriteParam(null);
// 要使用压缩,必须指定压缩方式为MODE_EXPLICIT
imgWriteParams.setCompressionMode(imgWriteParams.MODE_EXPLICIT);
// 这里指定压缩的程度,参数qality是取值0~1范围内,
imgWriteParams.setCompressionQuality((float)0.1/data.length);  imgWriteParams.setProgressiveMode(imgWriteParams.MODE_DISABLED);
ColorModel colorModel = ColorModel.getRGBdefault();
// 指定压缩时使用的色彩模式
imgWriteParams.setDestinationType(new javax.imageio.ImageTypeSpecifier(colorModel, colorModel  .createCompatibleSampleModel(16, 16)));  try
{  src = ImageIO.read(is);  out = new ByteArrayOutputStream(data.length);  imgWrier.reset();  // 必须先指定 out值,才能调用write方法, ImageOutputStream可以通过任何 OutputStream构造  imgWrier.setOutput(ImageIO.createImageOutputStream(out));  // 调用write方法,就可以向输入流写图片  imgWrier.write(null, new IIOImage(src, null, null), imgWriteParams);  out.flush();  out.close();  is.close();  data = out.toByteArray();
}
catch(Exception e)
{  e.printStackTrace();
}  

转载链接:http://fandayrockworld.iteye.com/blog/628551

java TIFF转JPG并压缩相关推荐

  1. java图片的导出,并压缩

    java图片的导出,并压缩 java 压缩包jar包使用的是commons-compress-1.6.jar /*** 导出图片* @param request* @param response*/@ ...

  2. java 解压到内存,Java GZip 基于内存实现压缩和解压的方法

    欢迎大家关注本博,同时欢迎大家评论交流,可以给个赞哦!!! GZip是常用的无损压缩算法实现,在Linux中较为常见,像我们在Linux安装软件时,基本都是.tar.gz格式..tar.gz格式文件需 ...

  3. java实现linux中gzip压缩解压缩算法:byte[]字节数组,文件,字符串,数据流的压缩解压缩

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java实现gzip压缩解压缩byte[]字节数组,文件,字符串. 测试代码 public static void main(String[] a ...

  4. Java导出多个excel压缩成zip下载

    Java导出多个excel压缩成zip下载 maven <!--hutoos工具类根据需要可以导入不同的模块,我这里是导入全部的模块--><dependency><gro ...

  5. java高清无损图片压缩

    Java高清无损图片压缩 (本文禁止转载,如需转载请联系本人:微信/QQ同号:969987665) 简单介绍 thumbnailator-0.4.5.jar 官方下载网址 语法使用(超级简单的,再也没 ...

  6. java实现对pdf文件压缩,拆分,修改水印,添加水印

    最近要实现一个文件上传,并且在线预览上传文件的功能,设计思路是:把上传的文件通过openoffice转成pdf文件,并将pdf文件以流的形式返回到浏览器,由于上传的部分文件过大,转成pdf后传回前端浏 ...

  7. Java使用thumbnailator进行图片压缩缩放裁剪水印旋转处理

    Java使用thumbnailator进行图片压缩缩放裁剪水印旋转处理 一.thumbnailator介绍 二.使用步骤 1.maven的pom.xml引入如下 2.测试代码 一.thumbnaila ...

  8. java对gzip格式进行压缩与解压缩

    java对gzip格式进行压缩和解压缩 对gzip格式字符串进行解压缩 public static String unzip(String compressedStr){ if(compressedS ...

  9. [Java]还在用360压缩吗?自己写一个吧

    Java中的I/O支持读写压缩格式的数据流,我们可以对其进行封装以达到压缩和解压缩的目的. 这些类并不是从Reader.Writer继承来的,而是属于InputStream.OutputStream继 ...

  10. JAVA对象头的指针压缩

    JAVA对象头的指针压缩 文章目录 JAVA对象头的指针压缩 对象在JVM中的内存布局 对象的访问定位 压缩实验 实验步骤 压缩策略组合 压缩内容 压缩后的影响 指针压缩的实现 JVM内存关键大小 对 ...

最新文章

  1. Django博客系统项目需求分析
  2. Thrift架构~thrift中间语言的认识(只有它什么都不是,它才有可能什么都是)
  3. CTFshow php特性 web104
  4. python单元测试之unittest框架使用
  5. mysql5.7.25数据库安装
  6. AQS理解之二,自己设计一个锁
  7. raspberry pi 家族
  8. Beta版本测试报告
  9. unubtu16.04解决etc文件误改导致无法使用sudo等指令问题
  10. 微信小程序入门一:点击事件
  11. php上传文件表单,php中关于普通表单多文件上传的处理方法
  12. 文本显示变量_易标签使用Excel数据实现批量打印变量数据
  13. Perl文件内容对比
  14. Windows Server 2012安装密钥
  15. 大学生创新创业训练计划项目申请书
  16. 最大子段和问题【思路及实现】
  17. C++ 面向对象的编程语言有哪些特点?
  18. 进入BeOS的花花世界 系列七
  19. 【专题教程第4期】SEGGER的J-Scope波形上位机软件,HSS模式简单易用,无需额外资源,也不需要写目标板代码
  20. Android 热修复原理篇及几大方案比较

热门文章

  1. Persistent.
  2. 存储器类型与S3C2440启动地址
  3. 搜狗AI走向产业改造:纵横捭阖术与录音笔的新声态
  4. dolphinscheduler2.0.5 HTTP任务类型改造
  5. 为了防止世界被破坏,春运的抢票攻略在等着你们
  6. 【记录】codeReview总结
  7. 河北专升本经验总结分享
  8. 手写一个Spring Boot Starter
  9. 0055-空气质量检测
  10. 【ArcGIS】Packaging succeeded,but publishing failed unable to connect to publishing tools service