Java将图片压缩质量后返回一个byte数组
项目为了降低存储生成,需要将图片质量压缩大小不变,并且全程要在内存中进行,所以我写了下面的方法。方法中传入参数有两个一个是图片的byte数组,一个是压缩质量(压缩质量在0-1之间)。处理完毕后会返回一个新的byte数组出来
/*** 图片压缩质量然后返回一个byte数组** @param imageByte 图片byte数组* @param quality 压缩质量,在0-1之间,* @return 返回的字节数组*/
public static byte[] compressPicture(byte[] imageByte, float quality) throws IOException {ByteArrayInputStream byteInput = new ByteArrayInputStream(imageByte); //将byte数组转换成byte输入流BufferedImage image = ImageIO.read(byteInput); //将输入流,变成图片流// 如果图片空,返回空if (image == null) return null;// 得到指定Format图片的writerIterator 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);try {// 此处因为ImageWriter中用来接收write信息的output要求必须是ImageOutput// 通过ImageIo中的静态方法,得到byteArrayOutputStream的ImageOutputwriter.setOutput(ImageIO.createImageOutputStream(byteArrayOutputStream));writer.write(null, iIamge, iwp);} catch (IOException e) {return null;} finally {StreamClose.close(byteInput,byteArrayOutputStream);}return byteArrayOutputStream.toByteArray();
}
Java将图片压缩质量后返回一个byte数组相关推荐
- php-使用函数array_walk_recursive处理多维数组的键值后返回一个新数组
php-使用函数array_walk_recursive处理多维数组的键值后返回一个新数组 $result = array(); //$content是一个多维数组 $walk = array_wal ...
- 返回数组个数Java_用java实现返回一个整数数组中最大数组的和
今天研究了一下如何返回一个整数数组中最大数组的和,具体要求如下: 分析: 对于这个问题可以设定一个整型max,让他来充当子数组的和的最大值,之后就需要让他和所有的子数组进行比较,这里可以用两个for循 ...
- java定义一个方法,返回一个整数数组的元素平均值
java定义一个方法,返回一个整数数组的元素平均值 /*** 定义一个方法* 返回一个整数数组的元素平均值*/ public class Test25 {public static double av ...
- java定义一个方法,返回一个整数数组的元素最小值
java定义一个方法,返回一个整数数组的元素最小值 /*** 定义一个方法* 返回一个整数数组的元素最小值*/ public class Test24 {public static int minAr ...
- java定义一个方法,返回一个整数数组的和
java定义一个方法,返回一个整数数组的和 /*** 定义一个方法* 返回一个整数数组的和*/ public class Test22 {//定义数组public static int getArra ...
- java string 数组 个数,Java - 定义一个接收String的方法,并返回一个整数数组,其中包含每个元音的数量...
(对不起提前q长 - 只是想详细说明!) 嗨,大家好, 我一直在努力让这段代码编译这么长时间,我已经到处研究过(包括在这里!)但似乎没有任何工作,我一直在收到错误.我不断调整我如何定义我的静态方法以及 ...
- Java将图片压缩为原来的一半
Java将图片压缩为原来的一半 思路: 1.获取源图片的尺寸 2.设置目标图片的尺寸 3.打开源图片 4.基于源图片生成目标图片 ps: 在linux上无法使用JPEGImageEncoder ,因此 ...
- 软件工程结对开发——返回一个整数数组中最大子数组的和(JAVA)
题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整型数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为 ...
- 结对开发——返回一个整数数组中最大子数组的和 (首尾相接版)
一.题目及题目要求 题目:返回一个整数数组中最大子数组的和. 要求: (1)输入一个整形数组,数组里有正数也有负数. (2)数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. (3)如果 ...
最新文章
- 1-VMware workstation认识
- python 回溯法 01背包问题_Python回溯法解决01背包问题
- sdut2772 KMP的简单应用
- python基础3(来自廖雪峰的官方网站)
- ML:MLOps系列讲解之《MLOps的State(工具和框架)》解读
- kylin源码调试_Apache Kylin 命令注入漏洞调试分析(CVE-2020-1956)
- 搭建K8s集群(平台规划和部署方式介绍)
- 基于XML及注解配置方式实现AOP及aspectJ表达式
- mysql - Docker Wordpress连接到本地主机上的数据库服务器
- 王海婷也可以编程,厚脸皮谈自己的一些事情
- 提前三天教你们python制作万能抢购神器,学不会就准备过光棍节吧
- linux编译安卓源码,Ubuntu下编译Android源码
- 【别再说不懂linux命令了,再给你】
- 企业erp系统对企业预算和采购环节的作用
- DAY7:尚学堂高琪JAVA(66~69)
- c语言2的n次方太大了,计算2的N次方........有什么错吗?
- The JSP specification requires that an attribute name is preceded by whitespace出现错误
- 多层交换机静态路由实验
- node打包时遇到的问题
- MySQL是什么?它有什么优势?
热门文章
- js WOW.js滚动动画,跟随滚动条位置执行动画
- 微信社区该怎么玩----每一个优质的粉丝圈都需要有一个积分商城
- 【Y忍冬草】QTableWidget表格行列自动更改大小
- Java深浅克隆原理及实现
- 计算机组装电源线排,电脑装机小知识,机箱如何完美走线-做第一期的简单补充...
- seo优化工具-免费SEO优化工具-站长SEO优化软件
- 带你用python利用小猪佩奇制作四个小游戏
- mysql replicate-rewrite-db,mysql 主从复制 replicate-rewrite-db 无效
- Netty学习007-编解码器
- 【2015-2016 ACM-ICPC NERC】【F Froggy Ford】【最小生成树】【最短路】【思维好题】【往河中添加一块石头,使得最短路上最大距离最小】