Java实现图片压缩一般有两种方式,一种是用Graphics+文件格式转换框架完成,这种比较麻烦,代码量多一些,但是压缩出的图片质量会更好一些,另一种是用Google的一个开源框架thumbnailator完成,这种方式不需要写太多的代码就可以实现快速的图片压缩。

介绍一下我的项目情况,我的这个项目初期没有考虑到图片压缩问题,只是做了图片上传功能,没加图片压缩功能,在项目后期再加功能,在原代码的基础上改会显得比较麻烦,我则直接用代码后拦截器来做图片压缩功能,下面讲讲我的实现思路

因为在Controller和Server层已经实现了图片上传功能,不容易修改,首先创建一个代码后拦截器,前端在需要压缩图片的上传端口Request头中添加和后端约定好的标记头,在Server层,上传图片完成后,将图片的唯一id携带到Response中,如果代码后拦截器发现这个请求的Request头中有我们提前约定好的标记头,则在Response中取出图片的唯一id,然后通过id找到这张图片的存储位置,将这个图片压缩完成后,再向前端返回数据,完成这一次图片上传操作

如果你的项目还没有开始写图片上传功能,我建议是将我在拦截器中做的功能,放到Server层实现

下面贴出我的代码:

Maven依赖

<!--        图片压缩插件--><dependency><groupId>net.coobird</groupId><artifactId>thumbnailator</artifactId><version>0.4.17</version></dependency>

代码后拦截器

package com.example.chinacable.aop.AfterHandle;import com.example.chinacable.aop.Jwt.*;
import com.example.chinacable.config.BeanUtils;
import com.example.chinacable.mapper.AllMapper;
import com.example.chinacable.pojo.Enterprise_Upload;
import com.example.chinacable.pojo.Upload;
import com.example.chinacable.server.AuthenticationServer;
import com.example.chinacable.server.PublicPageServer;
import com.example.chinacable.server.PublicPageServerInf;
import com.example.chinacable.util.PIC;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;/*** 此拦截器为代码后处理器*/
@Component
public class AfterHandle implements HandlerInterceptor
{//如果前端请求头中有此字符串,则需要做压缩处理final static String Key = "YsKey";final static String Value = "Gjdfgoikr656ewItfMidf6565dsA";@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println(request.getContextPath());HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);AllMapper allMapper = BeanUtils.getBean(AllMapper.class);Enterprise_Upload enterprise_upload = null;Upload upload = null;String path = "123";String Flag = "123";try {Flag = (String) request.getHeader(Key);}catch (Exception e){System.out.println(e);}//判断通过,则该请求需要压缩if(Value.equals(Flag)){String unique_id = response.getHeader("unique_id");try {enterprise_upload = allMapper.Get_Enterprise_Upload_Byname(unique_id);upload = allMapper.Get_Upload_Byname(unique_id);}catch (Exception e){e.printStackTrace();}if(upload!=null){path = upload.getFull_path();}if(enterprise_upload != null){path = enterprise_upload.getFull_path();}//调用压缩算法PIC.PIC_Compression(path);}}}

压缩算法:

 //图片压缩算法public static void PIC_Compression(String full_path){try {Thumbnails.of(full_path).size(180,180).toFile(full_path);} catch (IOException e) {throw new RuntimeException(e);}}

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. 【Android 内存优化】图片文件压缩 ( Android 原生 API 提供的图片压缩功能能 | 图片质量压缩 | 图片尺寸压缩 )

    文章目录 一. 图片压缩 二. 图片文件压缩类型 三. Android 原生 API 提供的质量压缩 四. Android 原生 API 提供的尺寸压缩 一. 图片压缩 图片压缩 : ① 文件压缩 : ...

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

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

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

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

  9. java 实现图片截取功能

    最近项目需要实现图片截取的功能,之前也没做过,时间又赶,网上的例子感觉比较复杂,但是实际上java本身已经相关的API了,并不需要程序猿自己手动计算什么,当然如果是图片等比压缩可能就不同了,使用jav ...

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

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

最新文章

  1. 《OpenCV3编程入门》学习笔记8 图像轮廓与图像分割修复(六)图像修补
  2. 论文: Data-Driven Evolutionary Optimization: An Overview and case studies(1) 数据驱动概念,文章结构,大数分类
  3. eclipse新建python文件夹_eclipse 如何创建python文件
  4. BundleTrack:无需实例或类级别3D模型的6D姿态跟踪算法(IROS2021)
  5. DOM Node Element Attr 的联系与区别汇总
  6. 使用Asible连接被控端SHH拒绝解决办法
  7. 搭建JAVA可视化开发环境
  8. Atom中安装atom-terminal插件来打开命令行运行vue项目
  9. SVN为什么比git更好
  10. POJ1226 Substrings(二分+后缀数组)
  11. Java抽奖抢购算法
  12. 关于JSP表单的一些技巧和经验
  13. 计算机校园网网络系统设计方案,计算机网络课程设计-XX大学校园网网络设计方案.doc...
  14. java word搜索_java 实现word 文档的在线编辑. 以及全文关键字搜索和高亮显示
  15. net 4.6.2安装不成功_源泉设计安装不成功的问题之解决办法
  16. GPS原理与接收机————GPS信号及其导航电文
  17. c语言求m n最小公倍数,最大公因数和最小公倍数的求法 求mn的最大公约数C语言...
  18. 计算机应用专业毕业感言,大学毕业感言一句话
  19. D. Pythagorean Triples (math、暴力)
  20. 教你解决路由黑洞5招

热门文章

  1. web学生网页设计作业源码——国际足联世界杯(HTML+CSS)
  2. 多用组合少用继承的设计模式JAVA_结合设计模式理解多用组合少用继承的原则(转)...
  3. 知识星球问答精选(附五一赠书活动)
  4. PHP序列化与反序列化
  5. 如何制作专属的VS Code主题
  6. 关于“马太效应”,“蝴蝶效应”、“鲶鱼效应”的解释(转贴)
  7. 北京集训TEST12——PA( Mortal Kombat)
  8. 记一次CAN报文过滤器组调试过程
  9. 数据结构与算法——栈( Stack )
  10. python字符串行列转换_Excel、SQL、Python分别实现行列转换