【Java基础】图片压缩
最近有个需求,需要把图片字节码用Base64 encode之后作为请求报文的一部分调用外部服务方,服务方对图片的大小有要求,不能超过500KB,另一方面,请求报文太大,会出现如下错误:413 请求体过大
先看下现在的图片:
如果是线上的图片,我也写了个获取图片字节码,查看图片大小的小程序
public class GetImgSize {public static void main(String[] args) {String posUrl = "http://file11info.ppdai.com/4e598e3bd163405d90d8f7b7783d494d.jpg";byte[] a = getBy(posUrl);System.out.println(a.length);}private static byte[] getBy(String posUrl){try {URL url = new URL(posUrl);ByteArrayOutputStream outputStream = new ByteArrayOutputStream();try(InputStream inputStream = url.openStream()){int len = 0;byte[] buffer = new byte[1024];while (-1 != (len = inputStream.read(buffer))){outputStream.write(buffer, 0, len);}}return outputStream.toByteArray();} catch (Exception e) {e.printStackTrace();}return null;} }
压缩函数如下
public class GetImgSize {public static void main(String[] args) throws IOException {String posUrl = "http://file11info.ppdai.com/4e598e3bd163405d90d8f7b7783d494d.jpg";byte[] a = compress(posUrl);System.out.println(a.length);File output = new File("./duke-compressed-005.jpg");OutputStream out = null;try {out = new FileOutputStream(output);out.write(a);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally {if(out != null){out.flush();out.close();}}}
private static byte[] compress(String posUrl) throws IOException { ByteArrayOutputStream bos = new ByteArrayOutputStream(); ImageOutputStream ios = null; byte [] data = null; ImageWriter writer = null; try { URL url = new URL(posUrl); BufferedImage bufferedImage = ImageIO.read(url); writer = ImageIO.getImageWritersByFormatName("jpg").next(); ios = ImageIO.createImageOutputStream(bos); writer.setOutput(ios); ImageWriteParam param = writer.getDefaultWriteParam(); if (param.canWriteCompressed()){ param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); param.setCompressionQuality(0.5f); } writer.write(null, new IIOImage(bufferedImage, null, null), param); data = bos.toByteArray(); return data; } catch (Exception e) { e.printStackTrace(); }finally { bos.close(); if(ios != null){ ios.close(); } if(writer != null){ writer.dispose(); } } return null;}
}
转载于:https://www.cnblogs.com/zhengwangzw/p/10902930.html
【Java基础】图片压缩相关推荐
- Java将图片压缩为原来的一半
Java将图片压缩为原来的一半 思路: 1.获取源图片的尺寸 2.设置目标图片的尺寸 3.打开源图片 4.基于源图片生成目标图片 ps: 在linux上无法使用JPEGImageEncoder ,因此 ...
- 纯Java代码 图片压缩
Java图片压缩代码 package com.img; import java.awt.Image; import java.awt.image.BufferedImage; import java. ...
- Java将图片压缩100KB以下,压缩图片,将几MB的图片压缩成100KB
前言 随着手机像素越来越大图片占用内存就越大,用户上传多几张图片都占用了很多存储内存,所以我们需要将图片压缩为占用内存较小的图片 实现 复制这个类过去就可以使用,根据自己需求修改即可 package ...
- 写给大忙人看的 - Java中图片压缩上传至MinIO服务器(4)
之前文章已经介绍了 MinIO 的环境搭建,已经对文件的上传下载方法,本篇文章一起与大家来学习图片压缩上传的方法 1.背景 最近客户总抱怨 APP 中图片显示较慢, 升级服务器带宽又没有多的预算.查看 ...
- java 解决图片压缩背景色变黑的问题
项目场景: 之前公司有个需求是将用户上传的图片自动压缩,作为一个菜鸟,要想苟活于公司之下,大多时候都是面向百度开发,熟练地运用 CV 大法,不求成为公司的大佬,只想安安心心的过好每一天. 翻阅了很多博 ...
- Java实现图片压缩且不改变原图尺寸
最近工作中涉及图片压缩相关的操作,需求如下: 大于2MB的图片需要压缩到2MB以下,且不改变原图的尺寸 引入依赖: <dependency><groupId>net.coobi ...
- Java将图片压缩质量后返回一个byte数组
项目为了降低存储生成,需要将图片质量压缩大小不变,并且全程要在内存中进行,所以我写了下面的方法.方法中传入参数有两个一个是图片的byte数组,一个是压缩质量(压缩质量在0-1之间).处理完毕后会返回一 ...
- 图片上传压缩java_【java基础】压缩图片上传
1.pom.xml net.coobird thumbnailator 0.4.8 2.代码 /** * 上传图片 */ @RequestMapping(method = RequestMethod. ...
- Java实现图片压缩代码,图片大小转换
在很多项目中我们会把上传的图片做处理,比较图片上传过多对服务器的容量和带宽有很多的浪费,如果不是必须的高清图片,我们可以通过代码来做压缩.在我的项目中我们压缩图片的目的是让web页面打开的速度很快,并 ...
- Java 实现图片压缩、裁剪
1.引入依赖 <!--hutool 工具--> <dependency><groupId>cn.hutool</groupId><artifact ...
最新文章
- 【错误记录】Flutter 界面报错 ( No MediaQuery widget ancestor found. | Scaffold widgets require a MediaQuery )
- 如何使用知识图谱增强信息检索模型?
- 从信息瓶颈理论一瞥机器学习的“大一统理论”
- 正则表达式与扩展正则表达式区别
- 叶子问题(层次遍历加判断叶子)
- 回答朋友的问题(关于 RTEMS 学习)
- [Python3网络爬虫开发实战] Appium 爬取微信朋友圈
- dpdk X710 VF reset
- 浅析资产配置的几种方法
- 计算机游戏动漫制作自我鉴定,关于游戏实习的自我鉴定
- 2022杭州云栖大会定档11月3日至5日:技术产品发布+超4万平科技展
- pthon图片信息-3cv2-高阶处理
- 有钱就能赞助FIFA世界杯?NO!看雅迪电动车的全球征程
- linux中etc下的hosts(本地IP解析)文件详解
- openstack 使用iscsi连接网盘并提供cinder存储服务
- ios 升级后 不能在xcode 真机运行的报错处理
- MOOC TensorFlow入门实操课程代码回顾总结(三)
- 全程软件测试之测试需求分析与计划(1)
- Linphone android去电增加自定义SIP消息头的流程分析
- 微信公众账号与网站信息对接