当前位置:首页 > Java

java 如何旋转图片

2026-03-03 18:46:25Java

旋转图片的方法

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

使用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度
    }
}

旋转后保持完整图片

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

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 如何旋转图片

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

相关文章

如何运行java程序

如何运行java程序

编写Java代码 创建一个以.java为扩展名的文件,例如HelloWorld.java。文件内容需包含一个类定义,类名必须与文件名一致。例如: public class HelloWorld {…

java如何调用接口

java如何调用接口

调用接口的基本方法 在Java中调用接口通常涉及实现接口或使用接口引用对象。以下是几种常见场景的示例: 定义接口 public interface MyInterface { void…

vue实现放大图片

vue实现放大图片

实现图片放大功能的方法 在Vue中实现图片放大功能,可以通过多种方式实现。以下是几种常见的方法: 使用CSS transform属性 通过CSS的transform: scale()属性实现图片放…

react如何引用图片

react如何引用图片

在React中引用图片的方法 使用import直接引入图片 在React组件中,可以通过import语句将图片作为模块引入。这种方式适合在组件内部使用图片,Webpack会处理图片的路径和打包。…

java如何调试

java如何调试

调试Java程序的基本方法 使用IDE内置的调试工具(如IntelliJ IDEA或Eclipse)是最常见的方式。在代码行号旁点击设置断点,启动调试模式后,程序会在断点处暂停,允许查看变量值、调用栈…

vue实现图片加载

vue实现图片加载

Vue 实现图片加载的方法 在 Vue 中实现图片加载可以通过多种方式,以下是一些常见的方法: 使用 v-bind 绑定图片路径 通过 v-bind 动态绑定图片路径,可以灵活地加载本地或远程图片…