/**
* @Title: compressPicByQuality 
* @Description: 压缩图片,通过压缩图片质量,保持原图大小
* @param  quality:0-1
* @return byte[] 
* @throws
*/
public static byte[] compressPicByQuality(byte[] imgByte, float quality) {
byte[] inByte = null;
try {
ByteArrayInputStream byteInput = new ByteArrayInputStream(imgByte);
BufferedImage image = ImageIO.read(byteInput);

// 如果图片空,返回空
if (image == null) {
return null;
}
// 得到指定Format图片的writer
Iterator<ImageWriter> iter = ImageIO
.getImageWritersByFormatName("jpeg");// 得到迭代器
ImageWriter writer = (ImageWriter) iter.next(); // 得到writer

// 得到指定writer的输出参数设置(ImageWriteParam )
ImageWriteParam iwp = writer.getDefaultWriteParam();
iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); // 设置可否压缩
iwp.setCompressionQuality(quality); // 设置压缩质量参数

iwp.setProgressiveMode(ImageWriteParam.MODE_DISABLED);

ColorModel colorModel = ColorModel.getRGBdefault();
// 指定压缩时使用的色彩模式
iwp.setDestinationType(new javax.imageio.ImageTypeSpecifier(colorModel,
colorModel.createCompatibleSampleModel(16, 16)));

// 开始打包图片,写入byte[]
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); // 取得内存输出流
IIOImage iIamge = new IIOImage(image, null, null);

// 此处因为ImageWriter中用来接收write信息的output要求必须是ImageOutput
// 通过ImageIo中的静态方法,得到byteArrayOutputStream的ImageOutput
writer.setOutput(ImageIO
.createImageOutputStream(byteArrayOutputStream));
writer.write(null, iIamge, iwp);
inByte = byteArrayOutputStream.toByteArray();
} catch (IOException e) {
System.out.println("write errro");
e.printStackTrace();
}
return inByte;
}

java压缩图片内存大小,但不改变分辨率大小,第一种方式相关推荐

  1. 解决java压缩图片内存溢出问题

    解决java压缩图片内存溢出问题 import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutput ...

  2. unity改变物体大小的两种方式

    本文探讨了两种改变物体大小的方法,一种是通过transform.localscale,另一种是通过改变mesh的顶点坐标.第一种方式并没有真正改变物体大小,只是对物体进行了缩放,物理属性并没有改变.因 ...

  3. 对Java多线程编程的初步了解,实现多线程的三种方式以及多线程并发安全的线程同步机制

    什么叫进程?什么叫线程? 进程相当于一个应用程序,线程就是进程中的一个应用场景或者说是一个执行单元,一个进程可以启动多个线程,每个线程执行不同的任务,一个线程不能单独存在,他必须是进程的一部分,当进程 ...

  4. Android studio中TextView改变字体的两种方式(如仿宋、隶书)

    在Android中系统默认的字体有三种,通过在TextView中加上android:typeface="sans"来改变,而sans就是三种当中的其中的一种,还有两种分别是&quo ...

  5. 大数据正在改变客户服务的五种方式

    大数据正在改变客户服务的五种方式 任何组织的命脉,无论是否面向服务,都是需要为客户提供良好的服务.组织如何与其客户进行互动,会影响他们如何看待组织,这会影响潜在客户,除了组织最忠实的客户之外. 客户服 ...

  6. java中map类型_Java中Map类型遍历的两种方式对比

    Java中Map类型是存储键值对数据的类型,在编程过程经常使用,进行遍历操作对于每个Java程序员都不会模式,下面总结两种常用的遍历方式(一种keySet,一种entrySet),通过对比让你明白使用 ...

  7. Java版数据结构之单向链表 新增,有序新增的两种方式,修改和删除(CRUD)

    Java版数据结构之单向链表 CRUD Java版数据结构之单向链表 新增,有序新增的两种方式,修改和删除; 留了一个疑问; 我的代码仓库:https://github.com/zhuangbinan ...

  8. jQuery绑定点击事件和改变事件的几种方式以及多个元素绑定多个事件

    jQuery绑定点击事件和改变事件的几种方式以及多个元素绑定多个事件 简单的html页面: <!DOCTYPE html> <html lang="en"> ...

  9. ai物流智能调度 效率对比_人工智能在物流中:人工智能改变物流的5种方式

    ai物流智能调度 效率对比 A man who has been sleeping for twenty years and woke up in 2020 would find himself in ...

最新文章

  1. oracle数据库作业1,北京语言20秋《Oracle数据库开发》作业1(100分)
  2. linux内核网络协议栈--数据包的接收过程(二十)
  3. 【运维囧事】运维的苦乐之旅
  4. 不,保持警惕不会伤害Java。 关于Java许可的评论。
  5. 清华大学-曾鸣-《ARM微控制器与嵌入式系统》I2C总线(二)
  6. android如何与服务器交互?
  7. 【平面设计】扁平化设计(Ⅲ)——原则
  8. 理解python - 类
  9. 基于SSM的宠物商城系统
  10. docker部署达梦流程记录(DM7和DM8)
  11. 区块链与大数据,打造智能经济(读书笔记)——井底望天
  12. Tax Multiplier and Govenment Spending Multiplier
  13. 抖音发广告需要注意什么,三个注意事项与规范要牢记
  14. Flask框架的搭建
  15. 带你打开C语言的大门
  16. 2018 AFCTF 可怜的RSA
  17. 一套史诗级版vue详解!
  18. 使用PyCharm批量爬取小说
  19. C# windows服务部署到服务器上指令
  20. ltspice xvii(pcb电路图仿真软件) 31.05.2017

热门文章

  1. c java python sql是什么意思_SQL、Java、Python、C++ 是当今最顶级的技术?
  2. JAVA学习日记(第三十二天)
  3. 计算机顶级会议排名Rankings 英文投稿的一点经验
  4. 隔离型串口服务器和西门子1500PLC和通讯案例
  5. QT显示视频-QVideoWidget
  6. win7系统修复exe文件关联
  7. Oracle数据库客户端各个版本下载
  8. 素问·上古天真论原文
  9. java RSA/DSA/ECDSA实现数字签名
  10. Vue3二维码(QRCode)