当前位置:首页 > 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 实现图片加载与展示的方法 在 Vue 中实现图片加载和展示可以通过多种方式完成,包括静态资源引用、动态绑定、懒加载等。以下是几种常见的方法: 静态资源引用 将图片放在项目的 public 或…

js实现图片滚动效果

js实现图片滚动效果

使用CSS动画实现图片滚动 通过CSS的@keyframes和animation属性实现无缝滚动效果。将图片容器设置为横向排列,通过动画平移位置。 <style> .scroll-c…

vue实现图片循环

vue实现图片循环

实现图片循环展示 在Vue中实现图片循环展示可以通过v-for指令结合数组数据完成。以下是具体实现方式: 基础循环展示 准备图片数据数组,使用v-for渲染图片列表: <template&g…

如何安装java环境

如何安装java环境

下载JDK安装包 访问Oracle官方网站或OpenJDK项目页面,选择适合操作系统的JDK版本(如Windows、macOS或Linux)。确保下载与系统架构匹配的版本(32位或64位)。 运行安…

java如何配置环境变量

java如何配置环境变量

配置Java环境变量的方法 下载并安装JDK 从Oracle官网或OpenJDK下载适合操作系统的JDK安装包。运行安装程序并按照提示完成安装,记下JDK的安装路径(例如C:\Program File…

如何编写java

如何编写java

编写Java程序的基本步骤 安装Java开发工具包(JDK),确保系统环境变量配置正确。可以从Oracle官网下载最新版本的JDK并进行安装。 选择一个合适的集成开发环境(IDE),如Eclipse…