项目为了降低存储生成,需要将图片质量压缩大小不变,并且全程要在内存中进行,所以我写了下面的方法。方法中传入参数有两个一个是图片的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数组相关推荐

  1. php-使用函数array_walk_recursive处理多维数组的键值后返回一个新数组

    php-使用函数array_walk_recursive处理多维数组的键值后返回一个新数组 $result = array(); //$content是一个多维数组 $walk = array_wal ...

  2. 返回数组个数Java_用java实现返回一个整数数组中最大数组的和

    今天研究了一下如何返回一个整数数组中最大数组的和,具体要求如下: 分析: 对于这个问题可以设定一个整型max,让他来充当子数组的和的最大值,之后就需要让他和所有的子数组进行比较,这里可以用两个for循 ...

  3. java定义一个方法,返回一个整数数组的元素平均值

    java定义一个方法,返回一个整数数组的元素平均值 /*** 定义一个方法* 返回一个整数数组的元素平均值*/ public class Test25 {public static double av ...

  4. java定义一个方法,返回一个整数数组的元素最小值

    java定义一个方法,返回一个整数数组的元素最小值 /*** 定义一个方法* 返回一个整数数组的元素最小值*/ public class Test24 {public static int minAr ...

  5. java定义一个方法,返回一个整数数组的和

    java定义一个方法,返回一个整数数组的和 /*** 定义一个方法* 返回一个整数数组的和*/ public class Test22 {//定义数组public static int getArra ...

  6. java string 数组 个数,Java - 定义一个接收String的方法,并返回一个整数数组,其中包含每个元音的数量...

    (对不起提前q长 - 只是想详细说明!) 嗨,大家好, 我一直在努力让这段代码编译这么长时间,我已经到处研究过(包括在这里!)但似乎没有任何工作,我一直在收到错误.我不断调整我如何定义我的静态方法以及 ...

  7. Java将图片压缩为原来的一半

    Java将图片压缩为原来的一半 思路: 1.获取源图片的尺寸 2.设置目标图片的尺寸 3.打开源图片 4.基于源图片生成目标图片 ps: 在linux上无法使用JPEGImageEncoder ,因此 ...

  8. 软件工程结对开发——返回一个整数数组中最大子数组的和(JAVA)

    题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整型数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为 ...

  9. 结对开发——返回一个整数数组中最大子数组的和 (首尾相接版)

    一.题目及题目要求 题目:返回一个整数数组中最大子数组的和. 要求: (1)输入一个整形数组,数组里有正数也有负数. (2)数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. (3)如果 ...

最新文章

  1. 1-VMware workstation认识
  2. python 回溯法 01背包问题_Python回溯法解决01背包问题
  3. sdut2772 KMP的简单应用
  4. python基础3(来自廖雪峰的官方网站)
  5. ML:MLOps系列讲解之《MLOps的State(工具和框架)》解读
  6. kylin源码调试_Apache Kylin 命令注入漏洞调试分析(CVE-2020-1956)
  7. 搭建K8s集群(平台规划和部署方式介绍)
  8. 基于XML及注解配置方式实现AOP及aspectJ表达式
  9. mysql - Docker Wordpress连接到本地主机上的数据库服务器
  10. 王海婷也可以编程,厚脸皮谈自己的一些事情
  11. 提前三天教你们python制作万能抢购神器,学不会就准备过光棍节吧
  12. linux编译安卓源码,Ubuntu下编译Android源码
  13. 【别再说不懂linux命令了,再给你】
  14. 企业erp系统对企业预算和采购环节的作用
  15. DAY7:尚学堂高琪JAVA(66~69)
  16. c语言2的n次方太大了,计算2的N次方........有什么错吗?
  17. The JSP specification requires that an attribute name is preceded by whitespace出现错误
  18. 多层交换机静态路由实验
  19. node打包时遇到的问题
  20. MySQL是什么?它有什么优势?

热门文章

  1. js WOW.js滚动动画,跟随滚动条位置执行动画
  2. 微信社区该怎么玩----每一个优质的粉丝圈都需要有一个积分商城
  3. 【Y忍冬草】QTableWidget表格行列自动更改大小
  4. Java深浅克隆原理及实现
  5. 计算机组装电源线排,电脑装机小知识,机箱如何完美走线-做第一期的简单补充...
  6. seo优化工具-免费SEO优化工具-站长SEO优化软件
  7. 带你用python利用小猪佩奇制作四个小游戏
  8. mysql replicate-rewrite-db,mysql 主从复制 replicate-rewrite-db 无效
  9. Netty学习007-编解码器
  10. 【2015-2016 ACM-ICPC NERC】【F Froggy Ford】【最小生成树】【最短路】【思维好题】【往河中添加一块石头,使得最短路上最大距离最小】