使用Thumbnails实现图片指定大小压缩

使用thumbnailator导致OOM问题 使用thumbnailator导致OOM问题 thumbnailator 最近项目需要用户上传个人的图片以便于考勤打卡,但是考虑到用户上传的图片可能比较大,所以使用了thumbnailator进行压缩处理,日常测试时未发现任何问题,但是上线之后导致了OOM,经过排查发现是用thumbnailator进行压缩时,消耗的内存太高,虽然上传之后能够快速的释放内存,但是在并发的情况下,内存的消耗达到顶峰,... 阅读详情

项目中有个要求,对上传服务器的图片大小进行判断,大于500k的图片要进行压缩处理,让其小于500k后在上传。

可以通过java api的ImageIO实现图片压缩,但是看了网上的博客普遍都说bug比较多,会有OOM内存溢出的现象。

Thumbnails插件是Google的插件,能指定不同的参数进行压缩操作。
比如:宽高(size),缩放(scale),制定质量比(outputQuality)等。

插件使用的jar包为:
thumbnailator-0.4.8.jar

代码如下:

	/**
	 * 
	 * @param srcPath  原图片地址
	 * @param desPath  目标图片地址
	 * @param desFileSize  指定图片大小,单位kb
	 * @param accuracy 精度,递归压缩的比率,建议小于0.9
	 * @return
	 */
	public static String commpressPicForScale(String srcPath,String desPath,
			long desFileSize , double accuracy){
		try {
			File srcFile  = new File(srcPath);
			long srcFilesize = srcFile.length();
			System.out.println("原图片:"+srcPath + ",大小:" + srcFilesize/1024 + "kb");
			//递归压缩,直到目标文件大小小于desFileSize
			commpressPicCycle(desPath, desFileSize, accuracy);
			
			File desFile = new File(desPath);
			System.out.println("目标图片:" + desPath + ",大小" + desFile.length()/1024 + "kb");
			System.out.println("图片压缩完成!");
		} catch (Exception e) {
			e.printStackTrace();
		}
		return desPath;
	}

	public static void commpressPicCycle(String desPath , long desFileSize,
			double accuracy) throws IOException{
		File imgFile = new File(desPath);
		long fileSize  = imgFile.length();
		//判断大小,如果小于500k,不压缩,如果大于等于500k,压缩
		if(fileSize <= desFileSize * 500){
			return;
		}
		//计算宽高
		BufferedImage  bim = ImageIO.read(imgFile);
		int imgWidth = bim.getWidth();
		int imgHeight = bim.getHeight();
		int desWidth = new BigDecimal(imgWidth).multiply(
                new BigDecimal(accuracy)).intValue();
        int desHeight = new BigDecimal(imgHeight).multiply(
                new BigDecimal(accuracy)).intValue();
        Thumbnails.of(desPath).size(desWidth, desHeight).outputQuality(accuracy).toFile(desPath);
        //如果不满足要求,递归直至满足小于1M的要求
        commpressPicCycle(desPath, desFileSize, accuracy);
	}

然后压缩图片大小:

commpressPicForScale(filePath, filePath, 500, 0.8);

压缩完成:
在这里插入图片描述

图片压缩类 图片压缩 立即下载

相关推荐

图片过大引起的内存溢出解决方案

使用BitmapFactory加载图片时,如果图片过大可能引起OutOfmemory溢出的问题。解决办法。

Java使用Thumbnails实现图片指定大小压缩

Java使用Thumbnails实现图片指定大小压缩 项目中有个要求,对上传服务器的图片大小进行判断,大于50k的图片要进行压缩处理,让其小于50k后在上传。针对图片压缩,一般有以下两种方法:1)java api的ImageIO实现图片压缩,但效果不好,图片压缩后出现变红现象,看了网上的博客普遍都说bug比较多,会有OOM内存溢出的现象。2)该方法使用的是谷歌的Thumbnails插件来实现图片压缩。本文主要介绍的是使用插件实现图片压缩。 实现: Thumbnails.of("源文件路径")

qq_38530648的博客 1万+

论文阅读------Exposure Fusion: A Simple and Practical Alternative to High Dynamic Range Photography

Mertens T, Kautz J, Van Reeth F. Exposure fusion: A simple and practical alternative to high dynamic range photography[C]//Computer graphics forum. Oxford, UK: Blackwell Publishing Ltd, 2009, 28(1): 161-171. 摘要 本文提出了一种将包围曝光的序列融合到高质量图像中的技术,而无需先转换为高动态范围(HD.

qq_25283239的博客 3397

记一次图片压缩内存溢出的问题

记一次遇见的问题: 起因:Web应用在后台需要展示许多图片,于是页面出现卡顿甚至失去连接。一次性需要加载出60多张1.6M图片。 查看的文章: 1、前端|加载的图片太多或者太大怎么办(上) 2、java大图片内存溢出问题解决办法 3、java使用google开源工具实现图片压缩 4、使用Thumbnails实现图片指定大小压缩 5、Intellij IDEA 的Tomcat Server 配置VM options参数说明 了解:图片上传,硬盘的存放空间不值钱,但是网速太值钱了,用户加载半天,

Drollwanttofly的博客 1893

SpaceMesh Mining 教程

當參與Spacemesh的用戶在完成P盤工作後需要完成兩個部分工作:PoET+PoST,這兩部分均是在不同的規定時間完成,具體可參考後續的時間表。註意!只有PoET和PoST均完成的用戶才可以獲得收益。Spacemesh相關P盤教程:說明:1.Spacemesh每個紀元epoch周期為14天,在8月7日完成PoET的將在8月20日完成PoST,收益將在8月25日後發放(之後用戶收益將每隔14天發放一次) 後續PoET時間為8月7日+N14 **後續PoST時間為8月20日+N。

Yc Chan 的个人博客 1045

2017阿里内推笔试题--算法工程师(运筹优化)

2017阿里内推笔试题–算法工程师(运筹优化)题目沐哲是一个菜鸟仓库的一个拣货员,但他有非常个怪异的习惯。每次拣货的重量都要比之前拣的一个轻,每次拣到货后都可以得到1块钱,沐哲想知道这样最多能赚多少钱 32 34 7 33 21 2 13 12 3 11 26 36 16 30 22 1 24 14 20 23 25 5 19 29 27 15 9 17 31 4 6 18 8 10 3

shawpan的专栏 1万+

通过google插件Thumbnails实现图片指定大小压缩

前言: 1、由于商户进件时,上游对图片大小有要求(500kb以下),而我们平台图片过大(10M以上),所以必须通过程序将图片压缩后再上传; 2、java api可以通过ImageIO实现图片压缩,但效果不好,图片压缩后出现变红现象,故舍弃; 3、测试谷歌Thumbnails插件后,觉得还不错,故选用该插件来实现; 4、谷歌插件固然好,能指定不同的参数进行压缩,例如:宽高(size)、缩放(scal...

weixin_42590334的博客 656

关于StartAI本地部署相关问题解答

很多小伙伴们都有接入自己本地SD的需求,对此小编整理了一些相关问题~

HDJ9387的博客 940

Java压缩图片:根据指定大小压缩图片

摘要:本文介绍了Java中实现图片压缩功能的方法,主要通过Spring的MockMultipartFile将File转换为MultipartFile,然后使用Thumbnails库进行图片压缩处理。核心类包括ImageUtils(处理文件转换和IO操作)和FileResizeUtils(实现图片压缩逻辑)。代码实现了根据指定大小动态调整压缩质量,并提供了临时文件管理功能。运行结果会显示图片压缩前后的大小对比,适用于需要控制图片文件大小的应用场景。

mao125868的博客 712

利用Langchain生成合成数据的实践指南

合成数据是相对于从真实世界事件中收集的数据而言的人工生成的数据。它用于模拟真实数据,同时避免隐私泄露或遇到真实数据中的局限性。:尽管合成数据有诸多优点,但应谨慎使用,因为它可能无法捕捉真实世界的复杂性。

eahba的博客 398

【GAMES101】现代计算机图形学入门 资料整理

课程网址 课程主页 包括ppt 课程PPT和视频 一篇搞定!GAMES101现代计算机图形学入门(全) 作业链接地址 作业论坛 GAMES101课程环境搭建(Win10+VSCode) 计算机图形学笔记 虎书pdf 提取:n2rx 【必须】:高等数学(微积分、线性代数)、算法、数据结构 【非必须】:信号处理、数值分析、大学物理(光学) 在线公式编辑器 一定要做作业,如果个人要配置环境的话应该是配置opencv,eigen这两个核心库就行了,目前觉得最核心的一个作业是作业3,实现着色器和渲染管线,做完一遍

ysh的博客 2684

Java-多文件上传(如果图片超过指定大小自动压缩)

之前有个需求:文件上传时,如果是图片,超出指定大小,就自动压缩。为了实现这个功能,借用了 google的Thumbnails 工具,效果还是蛮好的。 全部代码如下: private void uploadFile(List<MultipartFile> files) throws IOException{ Long imgMaxSize = 1024L * 102...

ClareQi的博客 3216

基于STM32的半导体制冷片温度控制

制冷片温度控制,温控范围15℃~45℃,本人菜鸡一枚,大佬绕路。 #include "stm32f10x_gpio.h" #include "relay.h" void relay_Init(void){ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//Ê...

大白兔的博客 9016

java上传图片 压缩,java实现后台上传压缩图片

控制器的方法public ResultMap fileUpload(@RequestParam("file") MultipartFile file) {String pictureName = DateUtil.getAllTime();//获取压缩后的图片名称,随机生成String smallerPictureName = UUID.randomUUID().toString();try {/...

weixin_30714077的博客 612

MuJoCo XLA (MJX) 强化学习人形机器人四足机器人入门教程(三)

MJX 是用 JAX 编写的 MuJoCo 实现,可以在 GPU/TPU 上进行大批量训练。在本笔记本中,我们将演示如何使用 MJX 训练 RL 策略。在开始大量 RL 工作负载之前,我们先从一个简单的示例开始!xml = """"""接下来,我们使用 MJX 将 MuJoCo 模型和数据放到 GPU 设备上。下面,我们将打印来自 MuJoCo 和 MJX 的 qpos。

2506_90492529的博客 2472

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

java上传图片的时候压缩图片和生成缩略图

1.引入上传js <script type="text/javascript" src="/js/lib/ajaxfileupload.js"></script> 2.html内容 <input type="file" id="file" name="file" class="file" style="opacity: 0;widht:100px;height:100px" accept="image/*" onchange ="uploadFile(this,'fil

javafg的博客 775

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

java 压缩图片至指定大小

需求: 压缩图片至300k以下一开始没有思路在网上搜,发现google有个插件叫Thumbnails,然后看到了这篇文章:https://blog.youkuaiyun.com/u010355502/article/details/77197616思路很简单,按一定的比例压缩图片,如果压缩完大小达不到要求,就把压缩后的结果继续压缩,直到符合要求为止本文可以说是对原文作者代码的改进,去除了一些多余的IO过程,把...

worstezreal的博客 3万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

java 压缩图片至指定大小,使用Thumbnails插件

需求: 压缩图片至300k以下 一开始没有思路在网上搜,发现google有个插件叫Thumbnails,然后看到了这篇文章: https://blog.youkuaiyun.com/u010355502/article/details/77197616 思路很简单,按一定的比例压缩图片,如果压缩完大小达不到要求,就把压缩后的结果继续压缩,直到符合要求为止 本文可以说是对原文作者代码的改进,去除了一些多余的IO...

paul200345的博客 3302

Thumbnails压缩图片到指定大小

网上看了很多demo,很多都是照搬别人的代码,不管有没有问题,有的甚至递归不关流,还有的递归疯狂往自己磁盘写文件,递归一次写一次,我自己把网上的demo整理改了下发出来。 /** * @Description: 压缩图片到指定大小 * @Param: desFileSize:大小,accuracy:每次缩小几倍 * @return: String * @A...

qq_27275851的博客 3718

Thumbnails 压缩图片到指定kb

添加依赖: <!-- google图片处理 --> <dependency> <groupId>net.coobird</groupId> <artifactId>thumbnailator</artifactId> <version>0.4.11</version> </dependency> 代码 package com.solar.oa.card.util

冲冲冲 4216
上一篇: Jquery图片裁剪插件PhotoClip使用说明
下一篇: Zabbix学习小结-----介绍
DcForever
博客等级 码龄8年 71粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值