如何使用Java给您的图片瘦身之Thumbnailator技术
作者:yelangking1 发布时间:2023-10-31 10:25:52
前言
在我们的日常企业应用开发当中,会碰到很多的图片素材访问的场景。比如社交类应用,您会在朋友圈中存放大量的图片,还有一些在线旅游或者直播的行业,那些图片资源更是不胜枚举,试想我们的用户在移动端或者网页端上传了一张512KB的图片,如果我们在后台没有加以处理就直接丢给前端展示,那对企业的带宽和流量来说,无疑是一个巨大的灾难。因此,随着访问人数的越来越多,存储图片的数量也越来越大,我们一定要对图片进行相应的瘦身,减少它在网络上传输的大小,也能提高系统的访问速度。
由此,本文将重点介绍在Java后台开发应用当中,使用thumbnailator来进行图片资源的裁剪、缩小等瘦身操作,通过Java实际编码的方式加上实际图片的裁剪能实操,让您了解掌握thumbnailator瘦身方法。
一、Thumbnailator概况
1、Thumbnailator是什么?
Thumbnailator 是一个用来生成图像缩略图的 Java 类库,通过很简单的代码即可生成图片缩略图,也可直接对一整个目录的图片生成缩略图。
2、Thumbnailator能做什么?
Thumbnailator是一款高性能的java缩略图类库。支持的处理操作:图片缩放,区域裁剪,水印,旋转,保持比例。
3、Thumbnailator 的github地址
Thumbnailator是托管在github上的一个开源项目,github地址为:thumbnailator github地址
二、Thumbnailator具体使用步骤
1、使用Maven构建,在Pom.xml中引入相关资源
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.8</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
2、创建一个指定高为160和宽为160的缩略图
Thumbnails.of(new File("E:/ys/IMG_4004.JPG"))
.size(160, 160)
.toFile(new File("E:/ys/IMG_4004_160.JPG"));
注意:Thumbnails.of 也可以直接接受一个String类型的文件路径,而不需要传入一个File。这两种形式都是Thumbnails支持的参数。原图是5184*3456的5.51MB的照片
按照160*160裁剪后,生成的结果图已经变得非常小了,大小只占2.5kb,为什么这里的高度不是160呢?你可以思考一下,主要是因为裁剪时为了保持等比率缩小,因此就变成了107.
3、按比例缩放
@Test
public void test() throws IOException {
Thumbnails.of("E:/ys/IMG_4004.JPG")
.scale(0.5)
.toFile("E:/ys/IMG_4004_scale0.5.jpg");
}
这里可以明显的看到这里得到的结果图片的高度和宽度都是原来的一半。scale参数的值从0-1,中间可以取小数,表示百分比的意思。比如这里设置为0.5表示,表示高度和宽度按照50%来进行缩放。
4、按照图片质量裁剪
组件支持按照最终结果的质量进行缩放,通过设置outputQuality(d),d为一个0-1的值,也是一个百分比的数值。下面的代码表示图片大小保持不变,输出质量为原来的50%。
@Test
public void test3() throws IOException {
Thumbnails.of("E:/ys/IMG_4004.JPG")
.scale(1f)
.outputQuality(0.3f)
.toFile("E:/ys/IMG_4004_s1q0.3.jpg");
}
4、旋转和添加水印效果
下面是thumbnails在旋转和质量输出的比例控制,旋转使用角度来进行表示。
@Test
public void test8() throws IOException {
BufferedImage watermarkImage = ImageIO.read(new File("E:/ys/yl.jpg"));
Thumbnails.of(new File("E:/ys/IMG_4004.JPG"))
.scale(0.5f)
.rotate(180)//旋转180度
.watermark(Positions.BOTTOM_RIGHT, watermarkImage, 0.5f)
.toFile(new File("E:/ys/IMG_4004_90.JPG"));
}
上图生成出来的结果就是原图旋转了180度,然后在生成的图片的右下角添加一个水印的效果。
其它更多API和例子可以参考:官方示例
三、总结
来源:https://blog.csdn.net/yelangkingwuzuhu/article/details/127151913


猜你喜欢
- 举例:存在一个类:Public Class Student{ public string name; public int age;}Stu
- 在日常开发的过程中我们经常会需要调用第三方组件或者数据库,有的时候可能会因为网络抖动或者下游服务抖动,导致我们某次查询失败。这种时候我们往往
- 一、分析 本次博客,主要解决文件上传等一系列问题,将从两方面来论述,
- 我相信现在绝大部分App几乎避免不了消息推送,其实原理还是使用了长连接,通过服务端将消息推给客户端。市面上也有不少三方库,例如极光、友盟、个
- 本文实例讲述了Android使用ContentResolver搜索手机通讯录的方法。分享给大家供大家参考,具体如下:在这个程序中使用Cont
- 详细步骤首先在pom.xml文件中做一些修改:之前打war包需要修改打包方式,这次不需要了,因为默认就是 jar 包指定最终打成jar包的名
- 本文实例讲述了C#数据结构之队列(Quene)。分享给大家供大家参考,具体如下:队列(Quene)的特征就是“先进先出”,队列把所有操作限制
- 需要自定义ListView。这里就交FloatDelListView吧。复写onTouchEvent方法。如下:@Override &nbs
- 文件下载是一个软件开发中的常见需求。本文从最简单的下载方式开始步步递进,讲述了文件下载过程中的常见问题并给出了解决方案。并展示了如何使用多线
- 已知一副扑克牌有54张,去除大王和小王,剩余52张。在其中随机抽取4张牌,利用加减乘除进行计算得到24. 从A到10,他们的值分别为1到10
- (一)springboot web项目打jar包1、打包两种打包方式maven命令打包切换目录到工程根下,pom.xml所在位置,运行mav
- 下载和上传附件、发送短信和发送邮件,都算是程序中很常用的功能,之前记录了文件的上传和下载还有发送短信,由于最近比较忙,邮件发送的功能就没有时
- 概述在使用Spring Boot的时候我们经常使用actuator,健康检查,bus中使用/refresh等。这里记录如何使用注解的方式自定
- 1.以G71列车为例,首先对车次站台进行占位编码(从1开始到最后一站递加)对以上占位简单描述以下:G71总共18个站点那么我们的单个座位的座
- 有的时候,我们需要对一堆数据进行统计分析后生成HTML或Excel格式报表。本来这并不是一件很难的事,但确是件比较麻烦的事情。最令人头痛的是
- @RequestBody和@ResponseBody及Stringify()的作用首先,在项目的前后交互中json数据格式比较常用,普遍认为
- 本文实例讲述了Java实现的两个线程同时运行。分享给大家供大家参考,具体如下:/** * 两个案例同时运行案例 * 1:这个两个线程并不是有
- 第一步:下载JDK地址:http://www.oracle.com/technetwork/java/javase/downloads/in
- 一. 首先Swagger是什么?Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。
- 1. 前言Spring最重要的一个概念当属Bean了,我们写的Controller、Service、Dao凡是加了对应注解交给Spring管