• 用Java给您的图片瘦身之Thumbnailator技术


    前言

           在我们的日常企业应用开发当中,会碰到很多的图片素材访问的场景。比如社交类应用,您会在朋友圈中存放大量的图片,还有一些在线旅游或者直播的行业,那些图片资源更是不胜枚举,试想我们的用户在移动端或者网页端上传了一张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中引入相关资源

    1. <dependency>
    2. <groupId>net.coobirdgroupId>
    3. <artifactId>thumbnailatorartifactId>
    4. <version>0.4.8version>
    5. dependency>
    6. <dependency>
    7. <groupId>junitgroupId>
    8. <artifactId>junitartifactId>
    9. <version>4.11version>
    10. <scope>testscope>
    11. dependency>

    2、创建一个指定高为160和宽为160的缩略图

    1. Thumbnails.of(new File("E:/ys/IMG_4004.JPG"))
    2. .size(160, 160)
    3. .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、按比例缩放

    1. @Test
    2. public void test() throws IOException {
    3. Thumbnails.of("E:/ys/IMG_4004.JPG")
    4. .scale(0.5)
    5. .toFile("E:/ys/IMG_4004_scale0.5.jpg");
    6. }

           这里可以明显的看到这里得到的结果图片的高度和宽度都是原来的一半。scale参数的值从0-1,中间可以取小数,表示百分比的意思。比如这里设置为0.5表示,表示高度和宽度按照50%来进行缩放。

     4、按照图片质量裁剪

          组件支持按照最终结果的质量进行缩放,通过设置outputQuality(d),d为一个0-1的值,也是一个百分比的数值。下面的代码表示图片大小保持不变,输出质量为原来的50%。

    1. @Test
    2. public void test3() throws IOException {
    3. Thumbnails.of("E:/ys/IMG_4004.JPG")
    4. .scale(1f)
    5. .outputQuality(0.3f)
    6. .toFile("E:/ys/IMG_4004_s1q0.3.jpg");
    7. }

     4、旋转和添加水印效果

          下面是thumbnails在旋转和质量输出的比例控制,旋转使用角度来进行表示。

    1. @Test
    2. public void test8() throws IOException {
    3. BufferedImage watermarkImage = ImageIO.read(new File("E:/ys/yl.jpg"));
    4. Thumbnails.of(new File("E:/ys/IMG_4004.JPG"))
    5. .scale(0.5f)
    6. .rotate(180)//旋转180度
    7. .watermark(Positions.BOTTOM_RIGHT, watermarkImage, 0.5f)
    8. .toFile(new File("E:/ys/IMG_4004_90.JPG"));
    9. }

        上图生成出来的结果就是原图旋转了180度,然后在生成的图片的右下角添加一个水印的效果。

    其它更多API和例子可以参考:官方示例

     三、总结

           以上就是今天要讲解的所有内容,本文将重点介绍在Java后台开发应用当中,使用thumbnailator来进行图片资源的裁剪、缩小、旋转、添加水印等基础的裁剪操作,通过Java实际编码的方式对实际图片进行裁剪,让您了解并掌握thumbnailator瘦身方法。  

  • 相关阅读:
    【教3妹学算法-每日1题】使数组中所有元素都等于零
    Flutter 最佳实践 - 01
    Mybatis(1)—— 快速入门使用持久层框架Mybatis
    ERROR [main] regionserver.HRegionServer: Failed construction RegionServer
    【组件】Vue组件之间的通信父传子 | 子传父
    一文搞懂原型和原型链
    从零开始学习写Shell脚本【第三期,写一个实用的批量重命名指定文件夹文件脚本】
    一种新的DNA生物素系统Biotin LC hydrazide|CAS:109276-34-8|(+)-生物素酰胺基己酸肼
    学个Antenna:Matlab天线工具箱知多少(二)
    java[线程]volatile为什么不能保证原子性
  • 原文地址:https://blog.csdn.net/yelangkingwuzuhu/article/details/127151913