java压缩图片内存大小,但不改变分辨率大小,第一种方式
/**
* @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压缩图片内存大小,但不改变分辨率大小,第一种方式相关推荐
- 解决java压缩图片内存溢出问题
解决java压缩图片内存溢出问题 import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutput ...
- unity改变物体大小的两种方式
本文探讨了两种改变物体大小的方法,一种是通过transform.localscale,另一种是通过改变mesh的顶点坐标.第一种方式并没有真正改变物体大小,只是对物体进行了缩放,物理属性并没有改变.因 ...
- 对Java多线程编程的初步了解,实现多线程的三种方式以及多线程并发安全的线程同步机制
什么叫进程?什么叫线程? 进程相当于一个应用程序,线程就是进程中的一个应用场景或者说是一个执行单元,一个进程可以启动多个线程,每个线程执行不同的任务,一个线程不能单独存在,他必须是进程的一部分,当进程 ...
- Android studio中TextView改变字体的两种方式(如仿宋、隶书)
在Android中系统默认的字体有三种,通过在TextView中加上android:typeface="sans"来改变,而sans就是三种当中的其中的一种,还有两种分别是&quo ...
- 大数据正在改变客户服务的五种方式
大数据正在改变客户服务的五种方式 任何组织的命脉,无论是否面向服务,都是需要为客户提供良好的服务.组织如何与其客户进行互动,会影响他们如何看待组织,这会影响潜在客户,除了组织最忠实的客户之外. 客户服 ...
- java中map类型_Java中Map类型遍历的两种方式对比
Java中Map类型是存储键值对数据的类型,在编程过程经常使用,进行遍历操作对于每个Java程序员都不会模式,下面总结两种常用的遍历方式(一种keySet,一种entrySet),通过对比让你明白使用 ...
- Java版数据结构之单向链表 新增,有序新增的两种方式,修改和删除(CRUD)
Java版数据结构之单向链表 CRUD Java版数据结构之单向链表 新增,有序新增的两种方式,修改和删除; 留了一个疑问; 我的代码仓库:https://github.com/zhuangbinan ...
- jQuery绑定点击事件和改变事件的几种方式以及多个元素绑定多个事件
jQuery绑定点击事件和改变事件的几种方式以及多个元素绑定多个事件 简单的html页面: <!DOCTYPE html> <html lang="en"> ...
- ai物流智能调度 效率对比_人工智能在物流中:人工智能改变物流的5种方式
ai物流智能调度 效率对比 A man who has been sleeping for twenty years and woke up in 2020 would find himself in ...
最新文章
- oracle数据库作业1,北京语言20秋《Oracle数据库开发》作业1(100分)
- linux内核网络协议栈--数据包的接收过程(二十)
- 【运维囧事】运维的苦乐之旅
- 不,保持警惕不会伤害Java。 关于Java许可的评论。
- 清华大学-曾鸣-《ARM微控制器与嵌入式系统》I2C总线(二)
- android如何与服务器交互?
- 【平面设计】扁平化设计(Ⅲ)——原则
- 理解python - 类
- 基于SSM的宠物商城系统
- docker部署达梦流程记录(DM7和DM8)
- 区块链与大数据,打造智能经济(读书笔记)——井底望天
- Tax Multiplier and Govenment Spending Multiplier
- 抖音发广告需要注意什么,三个注意事项与规范要牢记
- Flask框架的搭建
- 带你打开C语言的大门
- 2018 AFCTF 可怜的RSA
- 一套史诗级版vue详解!
- 使用PyCharm批量爬取小说
- C# windows服务部署到服务器上指令
- ltspice xvii(pcb电路图仿真软件) 31.05.2017