最近有个需求,需要把图片字节码用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基础】图片压缩相关推荐

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

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

  2. 纯Java代码 图片压缩

    Java图片压缩代码 package com.img; import java.awt.Image; import java.awt.image.BufferedImage; import java. ...

  3. Java将图片压缩100KB以下,压缩图片,将几MB的图片压缩成100KB

    前言 随着手机像素越来越大图片占用内存就越大,用户上传多几张图片都占用了很多存储内存,所以我们需要将图片压缩为占用内存较小的图片 实现 复制这个类过去就可以使用,根据自己需求修改即可 package ...

  4. 写给大忙人看的 - Java中图片压缩上传至MinIO服务器(4)

    之前文章已经介绍了 MinIO 的环境搭建,已经对文件的上传下载方法,本篇文章一起与大家来学习图片压缩上传的方法 1.背景 最近客户总抱怨 APP 中图片显示较慢, 升级服务器带宽又没有多的预算.查看 ...

  5. java 解决图片压缩背景色变黑的问题

    项目场景: 之前公司有个需求是将用户上传的图片自动压缩,作为一个菜鸟,要想苟活于公司之下,大多时候都是面向百度开发,熟练地运用 CV 大法,不求成为公司的大佬,只想安安心心的过好每一天. 翻阅了很多博 ...

  6. Java实现图片压缩且不改变原图尺寸

    最近工作中涉及图片压缩相关的操作,需求如下: 大于2MB的图片需要压缩到2MB以下,且不改变原图的尺寸 引入依赖: <dependency><groupId>net.coobi ...

  7. Java将图片压缩质量后返回一个byte数组

    项目为了降低存储生成,需要将图片质量压缩大小不变,并且全程要在内存中进行,所以我写了下面的方法.方法中传入参数有两个一个是图片的byte数组,一个是压缩质量(压缩质量在0-1之间).处理完毕后会返回一 ...

  8. 图片上传压缩java_【java基础】压缩图片上传

    1.pom.xml net.coobird thumbnailator 0.4.8 2.代码 /** * 上传图片 */ @RequestMapping(method = RequestMethod. ...

  9. Java实现图片压缩代码,图片大小转换

    在很多项目中我们会把上传的图片做处理,比较图片上传过多对服务器的容量和带宽有很多的浪费,如果不是必须的高清图片,我们可以通过代码来做压缩.在我的项目中我们压缩图片的目的是让web页面打开的速度很快,并 ...

  10. Java 实现图片压缩、裁剪

    1.引入依赖 <!--hutool 工具--> <dependency><groupId>cn.hutool</groupId><artifact ...

最新文章

  1. 【错误记录】Flutter 界面报错 ( No MediaQuery widget ancestor found. | Scaffold widgets require a MediaQuery )
  2. 如何使用知识图谱增强信息检索模型?
  3. 从信息瓶颈理论一瞥机器学习的“大一统理论”
  4. 正则表达式与扩展正则表达式区别
  5. 叶子问题(层次遍历加判断叶子)
  6. 回答朋友的问题(关于 RTEMS 学习)
  7. [Python3网络爬虫开发实战] Appium 爬取微信朋友圈
  8. dpdk X710 VF reset
  9. 浅析资产配置的几种方法
  10. 计算机游戏动漫制作自我鉴定,关于游戏实习的自我鉴定
  11. 2022杭州云栖大会定档11月3日至5日:技术产品发布+超4万平科技展
  12. pthon图片信息-3cv2-高阶处理
  13. 有钱就能赞助FIFA世界杯?NO!看雅迪电动车的全球征程
  14. linux中etc下的hosts(本地IP解析)文件详解
  15. openstack 使用iscsi连接网盘并提供cinder存储服务
  16. ios 升级后 不能在xcode 真机运行的报错处理
  17. MOOC TensorFlow入门实操课程代码回顾总结(三)
  18. 全程软件测试之测试需求分析与计划(1)
  19. Linphone android去电增加自定义SIP消息头的流程分析
  20. 微信公众账号与网站信息对接

热门文章

  1. 分页Pagination
  2. Java基础--序列化和反序列化
  3. CTF加密题型解析:RSA算法的CTF解法之一
  4. 介绍一个日志记录函数
  5. 实现算法2.15、2.16的程序(一个数组只生成一个静态链表)
  6. MFC浮动窗口使用方法和注意事项
  7. 土人系列AS入门教程--对象篇
  8. windows下使用vim
  9. 低危漏洞- X-Frame-Options Header未配置
  10. HDU-1864最大报销额