java 本地图片压缩 转base64并限制文件大小
- /**
- 本地图片转base64并限制文件大小
- @param imagePath 图片全路径
- @param sizeLimit 大小 整数 限制的大小 KB 1024
- @return 返回值为0,imageurl为空;返回值为1,imageurl路径不可访问;具体指为转换后的值
*/
public static String convertLocalImageToBase64(String imagePath, Integer sizeLimit) {
Log.debug(“[本地图片转base64]imagePath:{},sizeLimit:{}” + imagePath + sizeLimit);
// 判断路径是否为空
if (StrUtil.isBlank(imagePath)) {
Log.debug(“传入的地址为空!”);
return “0”;
}
// 默认上限为50k
if (sizeLimit == null) {
sizeLimit = 50;
}
sizeLimit = sizeLimit * 1024;
String base64Image = null;
DataInputStream dataInputStream = null;
ByteArrayOutputStream outputStream = null;
ByteArrayInputStream inputStream = null;
try {
FileInputStream fis = new FileInputStream(imagePath);
dataInputStream = new DataInputStream(fis);
outputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[2048];
int length;
while ((length = dataInputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, length);
}
byte[] context = outputStream.toByteArray();
Log.debug(“[本地图片转base64]byte context”);
// 将图片数据还原为图片
inputStream = new ByteArrayInputStream(context);
BufferedImage image = ImageIO.read(inputStream);
int imageSize = context.length;
int type = image.getType();
int height = image.getHeight();
int width = image.getWidth();
BufferedImage tempImage;
// 判断文件大小是否大于size,循环压缩,直到大小小于给定的值
Log.debug(“[imageSize]” + imageSize + " sizeLimit :" + sizeLimit);
while (imageSize > sizeLimit) {
Log.debug(“[循环压缩]” + imageSize + " ,sizeLimit :" + sizeLimit);
// 将图片长宽压缩到原来的90%
height = new Double(height * 0.9).intValue();
width = new Double(width * 0.9).intValue();
tempImage = new BufferedImage(width, height, type);
// 绘制缩小后的图 //不执行也不报错需要配置下服务器tomcat启动配置 留在文章结尾
Log.debug(“[tempImage]” + tempImage);
tempImage.getGraphics().drawImage(image, 0, 0, width, height, null);
// 重新计算图片大小
outputStream.reset();
boolean wriFlag = ImageIO.write(tempImage, “jpg”, outputStream);
imageSize = outputStream.toByteArray().length;
Log.debug(“[压缩后 imageSize]” + imageSize);
}
// 将图片转化为base64并返回
byte[] data = outputStream.toByteArray();
// 此处一定要使用org.apache.tomcat.util.codec.binary.Base64,防止再linux上出现换行等特殊符号
base64Image = Base64.encodeBase64String(data);
return base64Image;
} catch (Exception e) {
Log.error(“[本地图片转base64][异常]”, e);
} finally {
IoUtil.close(dataInputStream);
IoUtil.close(outputStream);
IoUtil.close(inputStream);
}
Log.debug(“[本地图片转base64]base64Image的长度:{}” + base64Image.length());
return base64Image;
}
//这个不执行困扰了好几天,找了很多说法也换了很多方法都不行,最后在tomcat启动配置项修改了下 竟然成功了
linux下tomcat的启动文件要设置JAVA_OPTS=“-Djava.awt.headless=true”
java 本地图片压缩 转base64并限制文件大小相关推荐
- java将图片转成Base64编码,并压缩至40k
1.添加jar包 <!-- 压缩图片--> <dependency><groupId>net.coobird</groupId><artifact ...
- Android 超清大尺寸图片压缩转Base64中卡顿/速度优化问题整理(在子线程压缩Bitmap卡的主线程进度条走不动了。。。)
最近遇到需求是前后端传输图片使用的是Base64,但是前端(Android 端)图片很大(尺寸很大4480 × 2520,质量也很大7-10M),需要压缩到一定尺寸(1280 × 960,当然还可以压 ...
- Java将图片压缩为原来的一半
Java将图片压缩为原来的一半 思路: 1.获取源图片的尺寸 2.设置目标图片的尺寸 3.打开源图片 4.基于源图片生成目标图片 ps: 在linux上无法使用JPEGImageEncoder ,因此 ...
- vue3 项目修改打包后的引用路径,调整图片压缩成base64的门槛
vue3 项目修改打包后的引用路径,调整图片压缩成base64的门槛 前言 解决 完事 前言 最近的项目中需要在程序中显示一个H5页面,所以按照官方VUE CLI的教程创建了一个项目开始整.整到最后打 ...
- 前台图片压缩转换base64提交到后台
这里使用了挺好用的插件 localResizeIMG3-master 前台: <div class="photo" οnclick="imgPath.click() ...
- Java 实现图片压缩、裁剪
1.引入依赖 <!--hutool 工具--> <dependency><groupId>cn.hutool</groupId><artifact ...
- 纯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 中图片显示较慢, 升级服务器带宽又没有多的预算.查看 ...
最新文章
- 使用 Blender* 重新拓扑 VR 和游戏素材
- 百度bae mysql_微信公众号开发第二课 百度BAE搭建和数据库使用
- 未来,大脑扫描背包将神经科学带入现实世界
- 天堂向左,六级考场向右
- 51Testing第二十一期软件测试免费沙龙开始报名(上海)
- 菜单点击展开,超过四个则进行向右滑动显示demo
- easypoi 导入失败返回错误文件_从Excel批量导入数据说到ForkJoin的原理
- c需要实现安装卸载Linux模块,Linux内核模块编译与加载
- Oracle新建用户、角色,授权,建表空间
- 第三方登录 steam_如何在Steam中激活第三方游戏代码
- java数据清洗_数据清洗例子
- python简单温度转换,python编写的简单温度转换程序
- Imbalance data——数据不平衡问题
- 试题 基础练习 数列排序
- 成人世界黑话鉴定指南
- 2022年度上半年河南省建筑工程安全文明标准化示范工地认定意见公示
- java 开发程序IDE
- 基于VB的COM编程入门教程
- 《弃子长安》第九章 大漠金钩
- Mysql优化之使用短索引
热门文章
- linux ssh怎样删除文件夹,Linux服务器一键删除文件夹SSH命令
- 乐观锁和悲观锁各自应用场景
- 推荐7个超棒的监控工具
- 【专业数据】七.2020~2022年北京交通大学【计算机技术】专业复试线/分数线差/计划招生数/复试数/录取数/复试比例/录取率
- 多张无序图像自动全景拼接
- android 剪贴板图文混编,Android将图像复制到剪贴板/ clipdata
- Kafka分布式消费学习
- 计算两个有序数组的中位数(C++)
- python代码雨在桌面实现_今天七夕节,外面下着大雨,用Python的tkinter做一个下爱心雨的特效,发给妹子...
- IB考试结束就想溜?这些后续工作可要注意