当前位置:首页 > Java

java 如何旋转图片

2026-03-03 18:46:25Java

旋转图片的方法

在Java中,可以使用BufferedImageAffineTransform类来实现图片旋转。以下是具体实现步骤:

java 如何旋转图片

使用AffineTransform旋转图片

import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;

public class ImageRotator {
    public static void rotateImage(String inputImagePath, String outputImagePath, double angle) {
        try {
            BufferedImage originalImage = ImageIO.read(new File(inputImagePath));
            int width = originalImage.getWidth();
            int height = originalImage.getHeight();

            BufferedImage rotatedImage = new BufferedImage(width, height, originalImage.getType());
            Graphics2D g2d = rotatedImage.createGraphics();
            AffineTransform transform = new AffineTransform();
            transform.rotate(Math.toRadians(angle), width / 2, height / 2);
            g2d.setTransform(transform);
            g2d.drawImage(originalImage, 0, 0, null);
            g2d.dispose();

            ImageIO.write(rotatedImage, "png", new File(outputImagePath));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        rotateImage("input.png", "output.png", 90); // 旋转90度
    }
}

旋转后保持完整图片

上述方法可能导致部分图片被裁剪。如果需要完整显示旋转后的图片,可以调整输出图片的尺寸:

java 如何旋转图片

public static void rotateImageFull(String inputImagePath, String outputImagePath, double angle) {
    try {
        BufferedImage originalImage = ImageIO.read(new File(inputImagePath));
        double radians = Math.toRadians(angle);
        double sin = Math.abs(Math.sin(radians));
        double cos = Math.abs(Math.cos(radians));
        int newWidth = (int) Math.round(originalImage.getWidth() * cos + originalImage.getHeight() * sin);
        int newHeight = (int) Math.round(originalImage.getWidth() * sin + originalImage.getHeight() * cos);

        BufferedImage rotatedImage = new BufferedImage(newWidth, newHeight, originalImage.getType());
        Graphics2D g2d = rotatedImage.createGraphics();
        AffineTransform transform = new AffineTransform();
        transform.translate(newWidth / 2, newHeight / 2);
        transform.rotate(radians);
        transform.translate(-originalImage.getWidth() / 2, -originalImage.getHeight() / 2);
        g2d.setTransform(transform);
        g2d.drawImage(originalImage, 0, 0, null);
        g2d.dispose();

        ImageIO.write(rotatedImage, "png", new File(outputImagePath));
    } catch (Exception e) {
        e.printStackTrace();
    }
}

使用Thumbnailator库简化操作

如果需要更简洁的代码,可以使用Thumbnailator库:

import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.geometry.Positions;

public class ThumbnailatorRotate {
    public static void rotateImage(String inputImagePath, String outputImagePath, double angle) {
        try {
            Thumbnails.of(inputImagePath)
                .scale(1)
                .rotate(angle)
                .toFile(outputImagePath);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在pom.xml中添加依赖:

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

注意事项

旋转角度以度为单位,顺时针方向为正方向。对于大图片,旋转操作可能消耗较多内存。输出图片格式可根据需要更改为"jpg"等其他格式。

标签: 图片java
分享给朋友:

相关文章

vue图片实现多选

vue图片实现多选

Vue图片多选实现方法 基础实现方案 使用v-model绑定数组配合input[type="checkbox"]实现多选功能。创建图片列表数据时,每个图片对象应包含唯一标识符: data() {…

如何使用java

如何使用java

安装Java开发环境 下载并安装Java Development Kit(JDK),推荐从Oracle官网或OpenJDK获取最新版本。安装完成后配置环境变量,确保JAVA_HOME指向JDK安装路径…

如何删除java

如何删除java

卸载 Java 的步骤 Windows 系统: 打开控制面板,选择“程序和功能”或“卸载程序”,在列表中找到 Java 相关条目(如“Java Runtime Environment”或“Java D…

react如何添加图片

react如何添加图片

在React中添加图片的方法 使用import导入本地图片 将图片文件放在项目目录中(如src/assets),通过import语句引入后作为src属性值: import logo from './…

如何配置java环境变量

如何配置java环境变量

下载并安装JDK 从Oracle官网或OpenJDK项目下载适合操作系统的JDK安装包。运行安装程序,按照提示完成安装,默认路径通常为C:\Program Files\Java\jdk-版本号。 配…

java如何打印数组

java如何打印数组

打印数组的方法 在Java中,打印数组有多种方式,以下是几种常见的方法: 使用Arrays.toString()方法 这种方法适用于一维数组,可以快速将数组转换为字符串形式输出: int[] a…