使用Thumbnails对图片进行压缩处理

2023-11-17

引入依赖

	<dependency>
      <groupId>net.coobird</groupId>
      <artifactId>thumbnailator</artifactId>
      <version>0.4.8</version>
    </dependency>

举例,将一张1280乘720 的图片压缩成指定的500乘500的图片

    /**
     * 这种写法会按照指定大小和比例进行缩放
     * 
     * @throws IOException
     */
Thumbnails.of("粉色长方体.jpg").size(500, 500).toFile("nmnjrbi7vfld3fat53hw.jpg");

效果,会按指定大小自适应比例缩放,图片无明显变形
在这里插入图片描述

 	/**
     * 紧按照指定大小进行缩放
     * 
     * @throws IOException
     */
    private void compressedPic() throws IOException {
        /**
         * keepAspectRatio(false) 默认是按照比例缩放的
         */
        Thumbnails.of("粉色长方体.jpg").size(500, 500).keepAspectRatio(false).toFile("nmnjrbi7vfld3fat53hw.jpg");
    }
 

效果,图片紧按照指定大小缩放,图片变形
在这里插入图片描述

其他使用方法

		


	/**
     * 指定大小和比例进行缩放
     * 
     * @throws IOException
     */
    private void test1() throws IOException {
        /*
         * size(width,height) 若图片横比200小,高比300小,不变
         * 若图片横比200小,高比300大,高缩小到300,图片比例不变 若图片横比200大,高比300小,横缩小到200,图片比例不变
         * 若图片横比200大,高比300大,图片按比例缩小,横为200或高为300
         */
        Thumbnails.of("粉色长方体.jpg").size(200, 300).toFile("nmnjrbi7vfld3fat53hw.jpg");
        Thumbnails.of("粉色长方体.jpg").size(2560, 2048).toFile("nmnjrbi7vfld3fat53hw.jpg");
    }
 
    /**
     * 按照比例进行缩放
     * 
     * @throws IOException
     */
    private void test2() throws IOException {
        /**
         * scale(比例)
         */
        Thumbnails.of("粉色长方体.jpg").scale(0.25f).toFile("nmnjrbi7vfld3fat53hw.jpg");
        Thumbnails.of("粉色长方体.jpg").scale(1.10f).toFile("nmnjrbi7vfld3fat53hw.jpg");
    }
 
    /**
     * 不按照比例,指定大小进行缩放
     * 
     * @throws IOException
     */
    private void test3() throws IOException {
        /**
         * keepAspectRatio(false) 默认是按照比例缩放的
         */
        Thumbnails.of("粉色长方体.jpg").size(120, 120).keepAspectRatio(false).toFile("nmnjrbi7vfld3fat53hw.jpg");
    }
 
    /**
     * 旋转
     * 
     * @throws IOException
     */
    private void test4() throws IOException {
        /**
         * rotate(角度),正数:顺时针 负数:逆时针
         */
        Thumbnails.of("粉色长方体.jpg").size(1280, 1024).rotate(90).toFile("nmnjrbi7vfld3fat53hw.jpg");
        Thumbnails.of("粉色长方体.jpg").size(1280, 1024).rotate(-90).toFile("nmnjrbi7vfld3fat53hw.jpg");
    }
 
    /**
     * 水印
     * 
     * @throws IOException
     */
    private void test5() throws IOException {
        /**
         * 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("C:/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("C:/image_watermark_center.jpg");
    }
 
    /**
     * 裁剪
     * 
     * @throws IOException
     */
    private void test6() throws IOException {
        /**
         * 图片中心400*400的区域
         */
        Thumbnails.of("images/test.jpg").sourceRegion(Positions.CENTER, 400, 400).size(200, 200).keepAspectRatio(false)
                .toFile("C:/image_region_center.jpg");
        /**
         * 图片右下400*400的区域
         */
        Thumbnails.of("images/test.jpg").sourceRegion(Positions.BOTTOM_RIGHT, 400, 400).size(200, 200).keepAspectRatio(false)
                .toFile("C:/image_region_bootom_right.jpg");
        /**
         * 指定坐标
         */
        Thumbnails.of("images/test.jpg").sourceRegion(600, 500, 400, 400).size(200, 200).keepAspectRatio(false).toFile("C:/image_region_coord.jpg");
    }
 
    /**
     * 转化图像格式
     * 
     * @throws IOException
     */
    private void test7() throws IOException {
        /**
         * outputFormat(图像格式)
         */
        Thumbnails.of("images/test.jpg").size(1280, 1024).outputFormat("png").toFile("C:/image_1280x1024.png");
        Thumbnails.of("images/test.jpg").size(1280, 1024).outputFormat("gif").toFile("C:/image_1280x1024.gif");
    }
 
    /**
     * 输出到OutputStream
     * 
     * @throws IOException
     */
    private void test8() throws IOException {
        /**
         * toOutputStream(流对象)
         */
        OutputStream os = new FileOutputStream("C:/image_1280x1024_OutputStream.png");
        Thumbnails.of("images/test.jpg").size(1280, 1024).toOutputStream(os);
    }
 
    /**
     * 输出到BufferedImage
     * 
     * @throws IOException
     */
    private void test9() throws IOException {
        /**
         * asBufferedImage() 返回BufferedImage
         */
        BufferedImage thumbnail = Thumbnails.of("images/test.jpg").size(1280, 1024).asBufferedImage();
        ImageIO.write(thumbnail, "jpg", new File("C:/image_1280x1024_BufferedImage.jpg"));
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Thumbnails对图片进行压缩处理 的相关文章

  • 热重载在docker中运行的java程序

    我开发了一个java程序 应该在docker中运行 然而 我在调试docker中运行的java程序时遇到了很多痛苦 我在网上搜索 一些教程提出了像 spring dev tools 这样的工具 因为我的java程序是基于spring boo
  • 如果测试用例失败,Selenium Web 驱动程序无法关闭 Firefox 实例

    我各位 我正在使用 junit 和 selenium web 驱动程序 2 28 问题是 如果我运行成功的测试用例 Web 驱动器能够关闭 Firefox 实例 但是当测试用例失败时 Selenium Web 驱动器无法关闭 Firefox
  • 如何使用 FileChannel 将一个文件的内容附加到另一个文件的末尾?

    File a txt好像 ABC File d txt好像 DEF 我正在尝试将 DEF 附加到 ABC 所以a txt好像 ABC DEF 我尝试过的方法总是完全覆盖第一个条目 所以我总是最终得到 DEF 这是我尝试过的两种方法 File
  • 如何在一行中将字符串数组转换为双精度数组

    我有一个字符串数组 String guaranteedOutput Arrays copyOf values values length String class 所有字符串值都是数字 数据应转换为Double QuestionJava 中
  • JNI 不满意链接错误

    我想创建一个简单的 JNI 层 我使用Visual studio 2008创建了一个dll Win 32控制台应用程序项目类型 带有DLL作为选项 当我调用本机方法时 出现此异常 Exception occurred during even
  • java.io.IOException: %1 不是有效的 Win32 应用程序

    我正在尝试对 XML 文档进行数字签名 为此我有两个选择 有一个由爱沙尼亚认证中心为程序员创建的库 还有一个由银行制作的运行 Java 代码的脚本 如果使用官方 认证中心 库 那么一切都会像魅力一样进行一些调整 但是当涉及到银行脚本时 它会
  • Convert.FromBase64String 方法的 Java 等效项

    Java 中是否有相当于Convert FromBase64String http msdn microsoft com en us library system convert frombase64string aspx which 将指
  • java中删除字符串中的特殊字符?

    如何删除字符串中除 之外的特殊字符 现在我用 replaceAll w s 它删除了所有特殊字符 但我想保留 谁能告诉我我该怎么办 Use replaceAll w s 我所做的是将下划线和连字符添加到正则表达式中 我添加了一个 连字符之前
  • HDFS:使用 Java / Scala API 移动多个文件

    我需要使用 Java Scala 程序移动 HDFS 中对应于给定正则表达式的多个文件 例如 我必须移动所有名称为 xml从文件夹a到文件夹b 使用 shell 命令我可以使用以下命令 bin hdfs dfs mv a xml b 我可以
  • 如何为 Gson 编写自定义 JSON 反序列化器?

    我有一个 Java 类 用户 public class User int id String name Timestamp updateDate 我收到一个包含来自 Web 服务的用户对象的 JSON 列表 id 1 name Jonas
  • Java 页面爬行和解析之 Crawler4j 与 Jsoup

    我想获取页面的内容并提取其中的特定部分 据我所知 此类任务至少有两种解决方案 爬虫4j https github com yasserg crawler4j and Jsoup http jsoup org 它们都能够检索页面的内容并提取其
  • hibernate总是自己删除表中的所有数据

    您好 我正在开发一个 spring mvc 应用程序 它使用 hibernate 连接到存储文件的 mysql 数据库 我有两个方法 一个方法添加我选择的特定文件路径中的所有文件 另一种方法调用查询以返回从 mysql 存储的文件列表 问题
  • 请求位置更新参数

    这就是 requestLocationUpdates 的样子 我使用它的方式 requestLocationUpdates String provider long minTime float minDistance LocationLis
  • 将 Long 转换为 DateTime 从 C# 日期到 Java 日期

    我一直尝试用Java读取二进制文件 而二进制文件是用C 编写的 其中一些数据包含日期时间数据 当 DateTime 数据写入文件 以二进制形式 时 它使用DateTime ToBinary on C 为了读取 DateTime 数据 它将首
  • Java中未绑定通配符泛型的用途和要点是什么?

    我不明白未绑定通配符泛型有什么用 具有上限的绑定通配符泛型 stuff for Object item stuff System out println item Since PrintStream println 可以处理所有引用类型 通
  • Windows 上的 Nifi 命令

    在我当前的项目中 我一直在Windows操作系统上使用apache nifi 我已经提取了nifi 0 7 0 bin zip文件输入C 现在 当我跑步时 bin run nifi bat as 管理员我在命令行上看到以下消息 但无法运行
  • 运行 Jar 文件时出现问题

    我已将 java 项目编译成 Jar 文件 但运行它时遇到问题 当我跑步时 java jar myJar jar 我收到以下错误 Could not find the main class myClass 类文件不在 jar 的根目录中 因
  • Keycloak - 自定义 SPI 未出现在列表中

    我为我的 keycloak 服务器制作了一个自定义 SPI 现在我必须在管理控制台上配置它 我将 SPI 添加为模块 并手动安装 因此我将其放在 module package name main 中 并包含 module xml 我还将其放
  • android Accessibility-service 突然停止触发事件

    我有一个 AccessibilityService 工作正常 但由于开发过程中的某些原因它停止工作 我似乎找不到这个原因 请看一下我的代码并告诉我为什么它不起作用 public class MyServicee extends Access
  • java迭代器内部是如何工作的? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个员工列表 List

随机推荐

  • 寻找第K大的数的方法总结

    寻找第K大的数的方法总结 今天看算法分析是 看到一个这样的问题 就是在一堆数据中查找到第k个大的值 名称是 设计一组N个数 确定其中第k个最大值 这是一个选择问题 当然 解决这个问题的方法很多 本人在网上搜索了一番 查找到以下的方式 决定很
  • vscode 跳转到指定的行数的快捷键

    在工作中 尤其是容易产生错误的 js 代码 报错之后会提示有错误代码的位置 也就是在哪一行出问题了 在vscode 编辑器中 可以使用快捷键 跳转到指定的行数 快捷键 Ctrl G 然后在弹出的框中输入行数就可以了
  • 业务风控思考:如何建立识别、防御和决策体系?

    导语 在疫情扰乱生活节奏的三年中 经常会看到企业 降本增效 的话题 如 让员工感受寒气 搬走办公室绿植 降低食堂伙食标准等等 就企业运作成本而言 降低黑灰产 羊毛党 打码平台等 盗夺的有限资源无疑是最有效的降本方式之一 据不完全统计 我国现
  • CSS高级篇——多背景&背景原点

    CSS 提供了很多处理背景的手段 多背景 background image 可以同时设置多个背景图片 background image url this jpg url that gif url theother png 效果如下 back
  • 深度学习-Tensorflow2.2-卷积神经网络{3}-卫星图像识别卷积综合实例(二分类)-13

    import tensorflow as tf import matplotlib pyplot as plt matplotlib inline import numpy as np import pathlib 数据读取及预处理 dat
  • imap服务器收缓存pst文件夹,Outlook 转移OST数据文件 IMAP账户

    问题 windows8系统 装了Outlook2013 占用了C盘大约10G空间 主要都是数据文件 OST文件 占用的 希望能够把数据文件从C盘移至其他盘 并且账户是IMAP账户 不是Exchange google一下 绝大多数解决方案是针
  • 儿童趣味编程是什么?如何启迪编程思维?

    从前在大多数人的认知里 编程是成年人才能接触和应用到的知识和技术 它好像很晦涩难懂 离小孩子们的世界非常远 但是身处互联网时代 编程已经面向所有人群 孩子们也不必等到大学才能接触到相关知识 而是在小学或者更早的学龄前阶段 就有了系统学习编程
  • 日志的管理

    日志介绍 1 日志文件是重要的系统信息文件 记录了许多的重要的系统事件 包括有用户的登录信息 系统的启动信息 系统的安全信息 邮件相关信息 各种服务相关信息等 2 日志对于安全来说非常的重要 它记录了系统每天发生的各种事情 通过日志来检查错
  • mysql_real_connect 连接失败 问题!

    mysql 的c函数mysql real connect 用localhost为参数进行连接 第一次会成功 但第二次就会抛出异常 本人遇到这个问题 查找了好久 最后才发现问题所在 解决办法 改用ip地址就可以 经验共享
  • 目标检测之 IoU

    转载自 https blog csdn net u014061630 article details 82818112 IoU 作为目标检测算法性能 mAP 计算的一个非常重要的函数 但纵观 IoU 计算的介绍知识 都是直接给出代码 给出计
  • 基于树莓派博通BCM2835芯片手册导读写编简单引脚驱动代码编译和测试(树莓派)

    编写引脚驱动代码 这边写的是17引脚的驱动代码代码 IO口控制的代码在下面 这边只是简单的代码 驱动代码 include
  • 获取微信步数

    获取微信步数 getWalkCounts function var that this wx login success res wx getWeRunData success res1 console log res1 if res1 e
  • Java项目:ERP管理系统(java+SpringBoot+EasyUI+maven+mysql)

    源码获取 博客首页 资源 里下载 项目介绍 系统主要功能包括 首页 零售管理 零售出库 零售退货 采购管理 采购订单 采购入库 采购退货 销售管理 销售订单 销售出库 销售退货 仓库管理 其它入库 其它出库 调拨出库 组装单 拆卸单 财务管
  • Maven 中启动 Tomcat,控制台打印信息出现乱码

    Tomcat 可以正常启动 但是控制台输出打印的是乱码 很多教程要修改 settings 中的 VM Options 或者 File Encodings 但我的配置都是正确的 最后发现是因为新版本 Tomcat 改用 utf8 编码输出日志
  • 嵌入式开发--SPI介绍和驱动开发

    目录 一 通信总线SPI介绍 二 SPI时序介绍和工作模式 三 基于stm32的spi初始化步骤 一 通信总线SPI介绍 SPI 全称为Serial Peripheral Interface 是一种同步的串行通信协议 SPI协议最初由Mot
  • 不使用第3个变量,实现两个数的对调

    任务描述 本关任务 下列程序是不用第三个变量 实现将两个数进行对调的操作 程序代码如下 1 include
  • Python中pip安装与使用及错误解决方案合集

    文章目录 前言 一 pip 安装与使用 二 pip安装错误解决方案合集 1 module包没安装 2 import缺失 3 init py文件缺失 4 安装的第三方module包的版本不对 5 import导错包 6 未设置PYTHONPA
  • ionic ajax数据,Ionic/Cordova - AJAX requests failing with status

    I am unable to get my AJAX requests working on an Ionic Cordova app deployed to iOS and Android I get the following reje
  • Unity C# 函数笔记

    寻找子对象的某个组件 public T FindTransform
  • 使用Thumbnails对图片进行压缩处理

    引入依赖