Thumbnails压缩图片
应用场景
在和腾讯广点通交互生成视频的智能封面时,由于返回的智能封面图片的大小太大超出了限制,因此需要把图片压缩大小后再上传至腾讯
关于图片压缩的解决方案
在这里我主要使用的是Thumbnails来进行图片的压缩,下面会简单介绍一下工具类的使用。
- 依赖
<dependency><groupId>net.coobird</groupId><artifactId>thumbnailator</artifactId><version>0.4.8</version>
</dependency>
- 指定大小进行缩放
/** size(width,height) 若图片横比200小,高比300小,不变* 若图片横比200小,高比300大,高缩小到300,图片比例不变 若图片横比200大,高比300小,横缩小到200,图片比例不变* 若图片横比200大,高比300大,图片按比例缩小,横为200或高为300*/Thumbnails.of("images/test.jpg").size(200, 300).toFile("image/image_200x300.jpg");Thumbnails.of("images/test.jpg").size(2560, 2048).toFile("image/image_2560x2048.jpg");
- 按照比例进行缩放
/*** scale(比例)*/Thumbnails.of("images/test.jpg").scale(0.25f).toFile("images/image_25%.jpg");Thumbnails.of("images/test.jpg").scale(1.10f).toFile("images/image_110%.jpg");
- 不按照比例,指定大小进行缩放
/*** keepAspectRatio(false) 默认是按照比例缩放的*/Thumbnails.of("images/test.jpg").size(120, 120).keepAspectRatio(false).toFile("images/image_120x120.jpg");
- 旋转
/*** rotate(角度),正数:顺时针 负数:逆时针*/Thumbnails.of("images/test.jpg").size(1280, 1024).rotate(90).toFile("images/image+90.jpg");Thumbnails.of("images/test.jpg").size(1280, 1024).rotate(-90).toFile("images/iamge-90.jpg");
- 水印
/*** watermark(位置,水印图,透明度)*/Thumbnails.of("images/test.jpg").size(1280, 1024).watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File("images/watermark.png")), 0.5f).outputQuality(0.8f).toFile("images/image_watermark_bottom_right.jpg");Thumbnails.of("images/test.jpg").size(1280, 1024).watermark(Positions.CENTER, ImageIO.read(new File("images/watermark.png")), 0.5f).outputQuality(0.8f).toFile("images/image_watermark_center.jpg");
- 裁剪
/*** 图片中心400*400的区域*/Thumbnails.of("images/test.jpg").sourceRegion(Positions.CENTER, 400, 400).size(200, 200).keepAspectRatio(false).toFile("images/image_region_center.jpg");/*** 图片右下400*400的区域*/Thumbnails.of("images/test.jpg").sourceRegion(Positions.BOTTOM_RIGHT, 400, 400).size(200, 200).keepAspectRatio(false).toFile("images/image_region_bootom_right.jpg");/*** 指定坐标*/Thumbnails.of("images/test.jpg").sourceRegion(600, 500, 400, 400).size(200, 200).keepAspectRatio(false).toFile("images/image_region_coord.jpg");
- 转化图像格式
/*** outputFormat(图像格式)*/Thumbnails.of("images/test.jpg").size(1280, 1024).outputFormat("png").toFile("images/image_1280x1024.png");Thumbnails.of("images/test.jpg").size(1280, 1024).outputFormat("gif").toFile("images/image_1280x1024.gif");
具体使用
- 根据图片的url获取HttpConnection
private HttpURLConnection getImageInputStream(String imageUrl) {try {URL url = new URL(imageUrl);URLConnection urlConnection = url.openConnection();HttpURLConnection httpURLConnection = (HttpURLConnection) urlConnection;httpURLConnection.setConnectTimeout(1000 * 5);httpURLConnection.connect();return httpURLConnection;} catch (Exception e) {e.printStackTrace();throw new ManageException("获取图片HttpConnection失败");}}
- 获取图片大小
在这里我们使用httpURLConnection.getContentLength()获取图片的总大小
而不是使用httpURLConnection.getInputStream().available()获取图片大小,因为可能存在网络波动从流中获取数据的大小只是一部分,并不能获取总的大小,但是如果是把图片先下载下来再用这个方法获取大小,那是可以的
- 压缩图片
Thumbnails.of(httpURLConnection.getInputStream()).scale(1f).outputQuality(qulity).toFile(dirPath + fileName);
分享几个经常用的转换工具
- 根据url获取对应的base64
public static String getBase64ByUrl(String urlPath) {ByteArrayOutputStream data = new ByteArrayOutputStream();try {URL url = new URL(urlPath);byte[] by = new byte[1024];URLConnection urlConnection = url.openConnection();HttpURLConnection httpURLConnection = (HttpURLConnection) urlConnection;httpURLConnection.setConnectTimeout(1000 * 5);httpURLConnection.connect();InputStream inputStream = httpURLConnection.getInputStream();int len;while ((len = inputStream.read(by)) != -1) {data.write(by, 0, len);}inputStream.close();} catch (Exception e) {e.printStackTrace();}return Base64.getMimeEncoder().encodeToString(data.toByteArray());}
- 文件转字节数组
public static byte[] fileToBytes(File file) {byte[] fileBytes = null;FileInputStream fis = null;try {fis = new FileInputStream(file);fileBytes = new byte[(int) file.length()];fis.read(fileBytes);fis.close();} catch (Exception e) {e.printStackTrace();}return fileBytes;}
- 根据字节数组获取MD5
public static String getFileSignature(byte[] fileBytes) {MessageDigest digest = null;try {digest = MessageDigest.getInstance("MD5");digest.update(fileBytes);byte[] encryptBytes = digest.digest();return HexHelper.toHexString(encryptBytes);} catch (NoSuchAlgorithmException e) {e.printStackTrace();}return null;}
Thumbnails压缩图片相关推荐
- java使用Thumbnails压缩图片
java使用Thumbnails压缩图片 有时候为了缓解服务器上的存储压力,我们需要将图片进行压缩以换取空间. 下面使用的是google提供的压缩方式: 一.导包 <!-- 压缩图片大小 --& ...
- 记一次摸不着头脑的FullGC问题 (Thumbnails压缩图片占用巨大内存)
问题现象 首先用户反映,有数据不一致情况产生,为了查询什么原因导致的数据不一致问题, 扒拉出来日志看了一通,发现有个简单的查询耗时特别长,平时只要几ms返回结果的 确调用了200多s,查了各个服务的日 ...
- Thumbnails压缩图片到指定大小
网上看了很多demo,很多都是照搬别人的代码,不管有没有问题,有的甚至递归不关流,还有的递归疯狂往自己磁盘写文件,递归一次写一次,我自己把网上的demo整理改了下发出来. /** * @Descrip ...
- 使用 Thumbnails 压缩图片
PC上线的商城,最近推出了手机版(App & 微信公众号) 商品图片之前适配的PC版,尺寸较大,在手机端直接浏览会比较占用比较高的带宽导致速度变慢,本想让美工重新上传手机适配版的,商品繁多,重 ...
- thumbnailator压缩图片并存至Excel单元格代码
文章目录 依赖 压缩图片工具类: 存至excel的转化器 Excel导入导出的数据类 将数据库实体转化为excel实体 依赖 <dependency><groupId>com. ...
- 通过google插件Thumbnails实现图片指定大小压缩
前言: 1.由于商户进件时,上游对图片大小有要求(500kb以下),而我们平台图片过大(10M以上),所以必须通过程序将图片压缩后再上传: 2.java api可以通过ImageIO实现图片压缩,但效 ...
- 使用Thumbnails等比例压缩图片
如何使用Thumbnails等比例压缩图片 我是用MultipartFile来接收文件的 具体思路 直接上代码 我是用MultipartFile来接收文件的 最近项目中有一个需要是需要把上传的图片进行 ...
- JAVA根据指定大小压缩图片
/*** 根据指定大小压缩图片** @param sourceFilePath 源图片路径 + 文件名(例 "D:\\image\\aa.jpg")* @param outFile ...
- 浅谈Thumbnails压缩gif图片质量的实现方式
Thumbnails是一个比较大众的图片处理工具,类似的工具还有hutool,可以对图片进行裁剪.缩放.旋转.格式转换.水印等.然而它只提供单张图片的压缩,对于gif的压缩,却是需要我们自己去处理. ...
- 上传图片到OSS,并按指定大小范围压缩图片。完整工具类+三层调用
使用阿里的Oss服务器,做图片服务器. 项目功能为,前端,调用后端的接口,上传用户的图片! 1.controller类 @RestController @RequestMapping("/o ...
最新文章
- 2020-10-26(安卓逆向开篇)
- 由病毒引发的肠胃感冒
- android 代码签名apk,[Android]混淆代码后生成带签名的apk
- 正能量,让网络空间释放更多善意
- [ECMAScript] 说说你对set数据结构的理解
- 【读书笔记】周志华《机器学习》第三版课后习题讨第一章-绪论
- python读取txt文件每一行_Python3基础 file for+list 读取txt文本 并 一行一行的输出(低效率)...
- python 统计英文词频
- 算法导论2.3练习答案
- iOS oc对网络图片进行黑白化处理
- 判断矩形是否重叠 Python
- Ubuntu10.10下安装Tor,PolipoVidalia
- w3c标准的深入理解
- 解决java网络编程IPv6问题
- SAP 选择屏幕下拉框实现
- word固定行距mathtype显示不全问题解决方法
- Linux下poky编译2
- IOS 生成本地验证码
- 关于异步log4j2中location信息打印问题
- maven下载依赖失败
热门文章
- 云服务器被恶意ddos攻击了怎么办?
- 论文笔记:OntoED: Low-resource Event Detection with Ontology Embedding
- 一年级下册计算机教学计划,一年级科学下册教学计划
- D-Tale,实现Pandas GUI高效数据分析
- python --通过urlretrieve下载MP4文件
- openssl的x509命令简单入门
- HDU 4889 Scary Path Finding Algorithm
- 江西财大计算机研究生是统考,江西财经大学计算机技术在职研究生招生简章
- 【LeetCode】马三来刷题之Permutations
- 投射电子显微镜(TEM)