当前位置:首页 > Java

java 如何旋转图片

2026-02-05 07:32:11Java

旋转图片的方法

在Java中旋转图片可以通过多种方式实现,以下是几种常见的方法:

java 如何旋转图片

使用AffineTransformGraphics2D

Java的Graphics2D类结合AffineTransform可以实现图片旋转。以下是一个示例代码:

java 如何旋转图片

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 BufferedImage rotateImage(BufferedImage image, double angle) {
        double radians = Math.toRadians(angle);
        double sin = Math.abs(Math.sin(radians));
        double cos = Math.abs(Math.cos(radians));
        int newWidth = (int) Math.round(image.getWidth() * cos + image.getHeight() * sin);
        int newHeight = (int) Math.round(image.getHeight() * cos + image.getWidth() * sin);

        BufferedImage rotated = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g2d = rotated.createGraphics();
        AffineTransform transform = new AffineTransform();
        transform.translate((newWidth - image.getWidth()) / 2, (newHeight - image.getHeight()) / 2);
        transform.rotate(radians, image.getWidth() / 2, image.getHeight() / 2);
        g2d.setTransform(transform);
        g2d.drawImage(image, 0, 0, null);
        g2d.dispose();
        return rotated;
    }

    public static void main(String[] args) throws Exception {
        BufferedImage original = ImageIO.read(new File("input.jpg"));
        BufferedImage rotated = rotateImage(original, 45);
        ImageIO.write(rotated, "jpg", new File("output.jpg"));
    }
}

使用Thumbnailator

Thumbnailator是一个简化图像处理的库,可以轻松实现旋转功能:

import net.coobird.thumbnailator.Thumbnails;
import java.io.File;

public class ThumbnailatorRotate {
    public static void main(String[] args) throws Exception {
        Thumbnails.of(new File("input.jpg"))
            .scale(1)
            .rotate(90)
            .toFile(new File("output.jpg"));
    }
}

使用OpenCV

如果项目已集成OpenCV,可以使用其旋转功能:

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

public class OpenCVRotate {
    public static void main(String[] args) {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        Mat src = Imgcodecs.imread("input.jpg");
        Mat dst = new Mat();
        Mat rotationMatrix = Imgproc.getRotationMatrix2D(
            new org.opencv.core.Point(src.cols()/2, src.rows()/2), 45, 1);
        Imgproc.warpAffine(src, dst, rotationMatrix, src.size());
        Imgcodecs.imwrite("output.jpg", dst);
    }
}

注意事项

  • 旋转角度以度为单位,顺时针方向为正方向。
  • 旋转后图片尺寸可能会变化,需要计算新尺寸以避免裁剪。
  • 对于大图片,注意内存消耗和处理时间。
  • 某些格式(如JPEG)旋转可能导致质量损失,建议使用无损格式(如PNG)进行处理。

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

相关文章

vue实现图片预览

vue实现图片预览

实现图片预览功能 在Vue中实现图片预览功能可以通过多种方式完成,常见的有使用原生HTML5的<dialog>元素、第三方库如viewer.js或vue-photo-preview,以及自…

vue实现图片单选

vue实现图片单选

Vue 实现图片单选功能 在 Vue 中实现图片单选功能可以通过多种方式完成,以下是两种常见的实现方法: 方法一:使用 v-model 和单选按钮 通过将单选按钮与图片绑定,利用 v-model 管…

css制作图片

css制作图片

使用CSS创建图片效果 CSS可以通过多种方式实现图片的显示、处理和特效。以下是几种常见的方法: 使用background-image属性 在CSS中可以通过background-image属性将图…

如何学好java

如何学好java

理解基础概念 掌握Java的核心概念是学习的基础。包括数据类型、变量、运算符、控制流(如循环和条件语句)、数组等。理解面向对象编程(OOP)的四大特性:封装、继承、多态和抽象。 实践编程练习 通过实…

vue图片实现旋转

vue图片实现旋转

使用 CSS transform 实现图片旋转 在 Vue 中可以通过 CSS 的 transform 属性实现图片旋转效果。创建一个数据属性控制旋转角度,通过绑定样式动态更新。 <t…

react如何引入图片

react如何引入图片

在React中引入图片的方法 使用import直接引入 将图片文件放在项目src目录下(如src/images),通过ES6的import语法引入: import logo from './…