hutool相关base64图片处理工具类

引入maven

<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.4</version>
</dependency>

工具类

package com.db.common.utils.image;import cn.hutool.core.img.ImgUtil;import java.awt.*;
import java.awt.image.BufferedImage;
import java.math.BigDecimal;/*** 图片相关工具类*/
public class ImageUtil {/*** 计算图片的大小,返回单位为KB** @param imageBase64Str 图片base64数据* @return 图片大小*/public static Integer imageSize(String imageBase64Str) {//1.找到等号,把等号也去掉(=用来填充base64字符串长度用)Integer equalIndex = imageBase64Str.indexOf("=");if (imageBase64Str.indexOf("=") > 0) {imageBase64Str = imageBase64Str.substring(0, equalIndex);}//2.原来的字符流大小,单位为字节Integer strLength = imageBase64Str.length();System.out.println("imageBase64Str Length = " + strLength);//3.计算后得到的文件流大小,单位为字节Integer size = strLength - (strLength / 8) * 2;return bytesToKB(size);}/*** byte(字节)根据长度转成kb(千字节)** @param bytes byte字节数据* @return  kb*/public static Integer bytesToKB(long bytes) {BigDecimal filesize = new BigDecimal(bytes);BigDecimal megabyte = new BigDecimal(1024 * 1024);BigDecimal kilobyte = new BigDecimal(1024);float returnValue = filesize.divide(kilobyte, 1, BigDecimal.ROUND_DOWN).floatValue();return (int) returnValue;}/*** 根据图片的base64数据缩放图片** @param base64ImagStr 原图的base64字符串* @return base64图片*/public static String scaleImage(String base64ImagStr) {BufferedImage bufferedImage = ImgUtil.toImage(base64ImagStr);// 这块也可以直接通过传入一个image对象,Image scaleImage = ImgUtil.scale(bufferedImage, 0.8f);String resultBase64Str = ImgUtil.toBase64(scaleImage, "jpg");Integer imageSizeBase64 = imageSize(resultBase64Str);if (imageSizeBase64 > 200) {scaleImage(resultBase64Str);}return resultBase64Str;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/855920.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 身高差值排序(100分) - 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f…

22种常用设计模式示例代码

文章目录 创建型模式结构型模式行为模式 仓库地址https://github.com/Xiamu-ssr/DesignPatternsPractice 参考教程 refactoringguru设计模式-目录 创建型模式 软件包复杂度流行度工厂方法factorymethod❄️⭐️⭐️⭐️抽象工厂abstractfactory❄️❄️⭐️⭐️⭐️生成器bui…

如何配置node.js环境

文章目录 step1. 下载node.js安装包step2. 创建node_global, node_cache文件夹step3.配置node环境变量step3. cmd窗口检查安装的node和npm版本号step4. 设置缓存路径\全局安装路径\下载镜像step5. 测试配置的nodejs环境 step1. 下载node.js安装包 下载地址&#xff1a;node.js…

[程序员] openstack: openvswitch: firewall丢包

最近看到一个老问题&#xff1a;说openvswitch提供的防火墙策略&#xff0c;会导致网络性能下降&#xff0c;而且有丢包。 https://bugzilla.redhat.com/show_bug.cgi?id1559604 the firewalling changed and the firewall_driver is now ‘openvswitch’ ([security_groups…

application/x-www-form-urlencoded和json的区别

application/x-www-form-urlencoded 和 application/json 是两种不同的数据格式&#xff0c;常用于HTTP请求中传递数据。 它们各自的特点和使用场景如下&#xff1a; 1. application/x-www-form-urlencoded •特点&#xff1a;这是一种传统的表单提交时采用的编码类型&#x…

24年新版!这份Excel+Python飞速搞定数据分析手册,简直可以让Excel飞起来

前⾔ 微软在 UserVoice 上运营着⼀个反馈论坛&#xff0c;每个⼈都可以在这⾥提交新点⼦供他⼈投票。票数最⾼的功能请求是“将 Python 作为Excel 的⼀门脚本语⾔”&#xff0c;其得票数差不多是第⼆名的两倍。尽管⾃2015 年这个点⼦发布以来并没有什么实质性进展&#xff0c;…

Java基础学习-算术运算符-案例

目录 运算符&#xff1a; 表达式&#xff1a; 简单练习&#xff1a; 案例&#xff1a;拆分 数字运算注意点 隐式转换&#xff08;自动类型提升&#xff09;&#xff1a; 强制转换&#xff1a; 字符串操作&#xff1a; 字符&#xff1a; 运算符&#xff1a; 对字面量或…

交叉编译三方库时不生成动态库

交叉编译三方库时不生成动态库 在x86架构下交叉编译liblog4cpp库时&#xff0c;x86执行./configure && make 可以正常生成动态库&#xff0c;但是交叉编译时执行./configure --hostarm时只生成了.a的静态库&#xff0c;查看config.log,进一步发现“ checking if libto…

为数据安全护航,袋鼠云在数据分类分级上的探索实践

在大数据时代&#xff0c;数据具有多源异构的特性&#xff0c;且价值各异&#xff0c;企业需依据数据的重要性、价值指数等予以区分&#xff0c;以利采取不同的数据保护举措&#xff0c;避免数据泄露。故而&#xff0c;数据分类分级管理属于数据安全保护中极为重要的环节之一。…

Coco Test Engine:代码覆盖率分析的新时代

本文翻译自&#xff1a;Coco Test Engine – The New Era of Code Coverage Analysis 原文作者&#xff1a;Qt Group首席软件工程师Sbastien Fricker 审校&#xff1a;Felix Zhang 我们的Coco 7重大更新带来了一个长期以来备受期待的功能——测试数据生成&#xff08;即Coco …

springboot mybatis mysql新增后返回id(ai生成)

在Spring Boot项目中使用MyBatis和MySQL时&#xff0c;若想在插入数据后返回生成的ID&#xff0c;可以在Mapper接口的插入方法上使用Options注解&#xff0c;并设置useGeneratedKeys属性为true&#xff0c;同时指定keyProperty为实体类中对应ID的属性名。 以下是一个简单的示例…

对角线法则的由来

目录 一、前言 二、对角线法则 三、行列式的定义 1. 行列式的定义 2. (全)排列 3. 逆序数 四、由全排列逆序数 到 对角线法则规律 ​编辑 五、参考书目 一、前言 仅限于个人理解&#xff0c;对错没有查证。 二、对角线法则 提起对角线法则&#xff0c;我们更倾向于他是…

Rocky Linux 9.4 部署Zabbix 7.0

文章目录 Zabbix基本概念zabbix介绍zabbix特性zabbix结构 安装Zabbix主机名配置配置Zabbix-Server(1)禁用EPEL提供的Zabbix软件包(2)安装Zabbix Server、Web前端、Agent(3)创建初始数据库(4)Zabbix server配置数据库(5)为Zabbix前端配置PHP(6)启动Zabbix server和agent进程(7)放…

js正则表达式将一个字符串拆分成3个一组,每组添加,

let a123456789.9876543210a.toString().replace(/\B(?(\d{3})(?!\d))/g, ",")//输出结果&#xff1a;123,456,789.9,876,543,210num.toString(): 将数字 num 转换为字符串。 .replace(/\B(?(\d{3})(?!\d))/g, ,): .replace() 是字符串对象的方法&#xff0c;用…

RK3588 代码中导入torch报错

RK3588 代码中导入torch报错 使用RK3588测试官方的YOLOv8,出现下面的问题 发现是dfl函数中导入torch的时候产生的&#xff0c;但是我在python终端上执行导入torch并没有发生报错 Traceback (most recent call last):File "infer.py", line 243, in <module>b…

Linux进程概念(个人笔记)

Linux进程概念 1.冯诺依曼体系结构2.操作系统&#xff08;先描述&#xff0c;再组织&#xff09;3.进程3.1查看进程的方式3.2通过系统调用获取进程标识符3.4查看进程中常见字段状态的指令3.3fork创建子进程3.3.1fork的原理 3.4进程状态3.5进程优先级3.5.1Linux内核的调度队列与…

Java代码中如何在JSONObject按put顺序排序

编写java代码时&#xff0c;发现在JSONObject 对象中put 一些数据后&#xff0c;输出JSONObject对象信息时&#xff0c;展示的json信息中&#xff0c;排序发生了变化。 以下为部分代码&#xff1a; JSONObject expDataJson new JSONObject();JSONObject expJson new JSONObj…

如何基于Redis实现消息队列

Redis可以用作消息队列的实现方案,有以下几种实现方案: 一 列表(List)作为消息队列 List如何实现消息队列,详情见这篇文章:基于Redis List实现消息队列 二 发布/订阅(Pub/Sub) 发布/订阅是一种消息通信模式,其中消息生产者(发布者)发送消息,而消息消费者(订阅者…

【教师资格证考试综合素质——法律专项】教师法笔记以及练习题

《中华人民共和国教师法》 一&#xff0e;首次颁布&#xff1a;第一部《中华人民共和国教师法》于1993年10月31日由第八届全国人民代表大会常务委员会第四次会议通过&#xff0c;1994年1月1日起执行。 二&#xff0e;历次修改&#xff1a;2009年8月27日第十一届全国人民代表…

RK3568技术笔记十二 Android编译方法

Android源码说明 Android源码在SAIL-RK3568开发板光盘->Android->源代码中&#xff0c;由于android源码太大&#xff0c;在进行压缩时&#xff0c;进行分包压缩&#xff0c;因此有4部分&#xff0c;如图所示&#xff1a; 进行解压时&#xff0c;需将4部分压缩包放置同一…