程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • 快速入门

  • 克隆

  • 类型转换

  • 日期时间

  • IO流相关

  • 工具类

  • 语言特性

  • JavaBean

  • 集合类

  • Map

  • Codec编码

  • 文本操作

  • 注解

  • 比较器

  • 异常

  • 数学

  • 线程和并发

  • 图片

    • 图片工具 - `ImgUtil`
      • 1. 使用场景
      • 2. 主要方法与示例
        • 2.1 图片缩放
        • 示例:按比例缩放图片
        • 示例:按固定宽高缩放图片
        • 2.2 图片裁剪
        • 2.3 图片格式转换
        • 2.4 添加文字水印
        • 2.5 添加图片水印
      • 3. 实际应用场景
      • 4. 注意事项
    • 图片编辑器 - `Img`
  • 网络

  • 源码编译

  • 配置文件

  • 日志

  • 缓存

  • JSON

  • 加密解密

  • DFA查找

  • HTTP客户端

  • 定时任务

  • 扩展

  • 切面

  • 脚本

  • Office文档操作

  • 系统调用

  • 图形验证码

  • 网络Socket

  • JWT

  • Hutoll
  • 图片
scholar
2024-08-20
目录

图片工具 - ImgUtil

# 图片工具 - ImgUtil

简介

ImgUtil 是 Hutool 针对 Java AWT 图片处理进行的封装,提供了图片缩放、裁剪、转换、旋转、加水印等功能。该工具类可以大大简化图片处理的代码,并提高代码的可读性和可维护性。

# 1. 使用场景

  • 图像处理与优化:在开发需要对图像进行处理的应用时,如缩放、裁剪、旋转等操作,可以使用 ImgUtil 进行快速处理。
  • 批量图像转换:在处理大量图片时,可以通过 ImgUtil 快速进行格式转换或批量处理操作。
  • 水印添加:为图片批量添加文字或图片水印,防止图片盗用。
  • Web 应用中图像操作:在 Web 应用中,通过 ImgUtil 处理用户上传的图片,调整大小、格式、加水印等。

# 2. 主要方法与示例

# 2.1 图片缩放

scale 方法提供了按比例和按固定宽高缩放两种方式。

# 示例:按比例缩放图片

import cn.hutool.core.img.ImgUtil;
import cn.hutool.core.io.FileUtil;

public class ImgUtilExample {
    public static void main(String[] args) {
        // 按比例缩放图片,比例为0.5,即图片缩小一半
        ImgUtil.scale(
            FileUtil.file("d:/face.jpg"), 
            FileUtil.file("d:/face_result.jpg"), 
            0.5f // 缩放比例
        );
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
  • 方法签名:
    • public static void scale(File srcImageFile, File destImageFile, float scale)
  • 参数说明:
    • srcImageFile:原始图片文件。
    • destImageFile:缩放后的图片文件。
    • scale:缩放比例,值在 0 到 1 之间,表示缩小,值大于 1 表示放大。
  • 作用:根据指定的比例缩放图片,适用于需要快速调整图片大小的场景。

# 示例:按固定宽高缩放图片

import cn.hutool.core.img.ImgUtil;
import cn.hutool.core.io.FileUtil;

public class ImgUtilExample {
    public static void main(String[] args) {
        // 按指定宽度和高度缩放图片
        ImgUtil.scale(
            FileUtil.file("d:/face.jpg"), 
            FileUtil.file("d:/face_result.jpg"), 
            200, // 缩放后的宽度
            300  // 缩放后的高度
        );
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 2.2 图片裁剪

cut 方法用于裁剪图片,指定裁剪的矩形区域。

示例:裁剪图片

import cn.hutool.core.img.ImgUtil;
import cn.hutool.core.io.FileUtil;

import java.awt.Rectangle;

public class ImgUtilExample {
    public static void main(String[] args) {
        // 裁剪图片,指定裁剪区域为左上角(200, 200)位置,宽度100,高度100
        ImgUtil.cut(
            FileUtil.file("d:/face.jpg"), 
            FileUtil.file("d:/face_result.jpg"), 
            new Rectangle(200, 200, 100, 100) // 裁剪区域
        );
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  • 方法签名:
    • public static void cut(File srcImageFile, File destImageFile, Rectangle rectangle)
  • 参数说明:
    • srcImageFile:原始图片文件。
    • destImageFile:裁剪后的图片文件。
    • rectangle:裁剪区域的矩形对象,指定裁剪的起始位置和宽高。
  • 作用:在需要对图片进行局部剪裁时使用,适用于头像裁剪、缩略图生成等场景。

# 2.3 图片格式转换

convert 方法支持图片格式转换,如 GIF -> JPG、PNG -> GIF 等。

示例:将 PNG 图片转换为 JPG 格式

import cn.hutool.core.img.ImgUtil;
import cn.hutool.core.io.FileUtil;

public class ImgUtilExample {
    public static void main(String[] args) {
        // 将 PNG 图片转换为 JPG 格式
        ImgUtil.convert(
            FileUtil.file("d:/test2.png"), 
            FileUtil.file("d:/test2Convert.jpg")
        );
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
  • 方法签名:
    • public static void convert(File srcImageFile, File destImageFile)
  • 参数说明:
    • srcImageFile:原始图片文件。
    • destImageFile:转换后的图片文件。
  • 作用:在需要批量或单次转换图片格式时使用,适用于图片格式标准化、图片导出等场景。

# 2.4 添加文字水印

pressText 方法用于在图片上添加文字水印。

示例:在图片上添加文字水印

import cn.hutool.core.img.ImgUtil;
import cn.hutool.core.io.FileUtil;

import java.awt.Color;
import java.awt.Font;

public class ImgUtilExample {
    public static void main(String[] args) {
        // 在图片上添加“版权所有”的文字水印,字体为黑体,大小为100
        ImgUtil.pressText(
            FileUtil.file("d:/face.jpg"), 
            FileUtil.file("d:/face_result.jpg"), 
            "版权所有", // 水印文字
            Color.WHITE, // 水印颜色
            new Font("黑体", Font.BOLD, 100), // 水印字体
            0, // X坐标修正值
            0, // Y坐标修正值
            0.8f // 透明度(范围[0.0, 1.0])
        );
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  • 方法签名:
    • public static void pressText(File srcImageFile, File destImageFile, String pressText, Color color, Font font, int x, int y, float alpha)
  • 参数说明:
    • srcImageFile:原始图片文件。
    • destImageFile:添加水印后的图片文件。
    • pressText:水印文字。
    • color:水印颜色。
    • font:水印字体。
    • x、y:水印位置修正值,偏移量相对于图片中心。
    • alpha:透明度,值范围为 [0.0, 1.0],值越小越透明。
  • 作用:用于图片版权保护、品牌标识等场景。

# 2.5 添加图片水印

pressImage 方法用于在图片上添加图片水印。

示例:在图片上添加图片水印

import cn.hutool.core.img.ImgUtil;
import cn.hutool.core.io.FileUtil;

import java.awt.image.BufferedImage;

public class ImgUtilExample {
    public static void main(String[] args) {
        BufferedImage watermarkImage = ImgUtil.read(FileUtil.file("d:/watermark.png"));

        // 在图片上添加水印图片,水印透明度为0.1
        ImgUtil.pressImage(
            FileUtil.file("d:/face.jpg"), 
            FileUtil.file("d:/face_result.jpg"), 
            watermarkImage, // 水印图片
            0, // X坐标修正值
            0, // Y坐标修正值
            0.1f // 透明度
        );
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 3. 实际应用场景

  • 图片批量处理:在需要处理大量图片时,ImgUtil 提供了高效、易用的图像操作方法,适合电商平台、在线图库等需要批量处理图片的场景。
  • 水印保护:通过 ImgUtil 快速为图片添加水印,适用于保护图片版权、增加品牌标识等场景。
  • 图片优化与格式转换:在 Web 应用中,用户上传的图片可能需要统一格式或大小,通过 ImgUtil 实现图片的标准化处理。

# 4. 注意事项

  • 处理较大图片时,建议考虑内存使用情况,避免内存溢出。
  • 透明度设置范围应在 [0.0, 1.0] 之间,超出范围可能导致异常或不可预期的结果。
编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08
高并发测试工具 - `ConcurrencyTester`
图片编辑器 - `Img`

← 高并发测试工具 - `ConcurrencyTester` 图片编辑器 - `Img`→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式