当前位置:首页 > 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
分享给朋友:

相关文章

网页制作css图片切换

网页制作css图片切换

CSS图片切换的实现方法 使用CSS实现图片切换可以通过多种方式完成,以下是几种常见的方法: 纯CSS轮播图 通过CSS动画和关键帧实现自动轮播效果。定义一个容器,内部放置多个图片,利用anima…

网页设计制作css图片

网页设计制作css图片

CSS图片处理基础方法 在网页设计中,CSS可以控制图片的尺寸、位置、边框等样式属性。通过<img>标签或背景图方式引入图片后,使用CSS属性进行调整。 img { width:…

css3手工制作图片

css3手工制作图片

使用CSS3手工制作图片 CSS3可以通过各种属性如box-shadow、border-radius、gradient等来手工绘制简单的图形或图片效果。以下是几种常见的方法: 绘制圆形 通过bord…

vue实现图片轮播

vue实现图片轮播

Vue 实现图片轮播的方法 使用第三方库(推荐) 安装 vue-awesome-swiper 库,这是基于 Swiper 的 Vue 封装: npm install swiper vue-awes…

vue2实现图片懒加载

vue2实现图片懒加载

实现图片懒加载的方法 在Vue2中实现图片懒加载可以通过以下方法完成,核心原理是监听图片是否进入可视区域,再动态加载图片资源。 使用IntersectionObserver API Intersec…

如何打开java

如何打开java

打开 Java 程序的方法 通过命令行运行 Java 程序 确保已安装 Java Development Kit (JDK) 并配置环境变量。使用 javac 编译 .java 文件,生成 .clas…