java如何旋转图片
旋转图片的方法
在Java中,可以使用BufferedImage和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 degrees) {
try {
// 读取输入图片
BufferedImage inputImage = ImageIO.read(new File(inputImagePath));
// 计算旋转后的图片尺寸
double radians = Math.toRadians(degrees);
double sin = Math.abs(Math.sin(radians));
double cos = Math.abs(Math.cos(radians));
int newWidth = (int) Math.round(inputImage.getWidth() * cos + inputImage.getHeight() * sin);
int newHeight = (int) Math.round(inputImage.getHeight() * cos + inputImage.getWidth() * sin);
// 创建新的BufferedImage
BufferedImage outputImage = new BufferedImage(newWidth, newHeight, inputImage.getType());
Graphics2D g2d = outputImage.createGraphics();
// 设置旋转中心点并执行旋转
AffineTransform transform = new AffineTransform();
transform.translate((newWidth - inputImage.getWidth()) / 2, (newHeight - inputImage.getHeight()) / 2);
transform.rotate(radians, inputImage.getWidth() / 2, inputImage.getHeight() / 2);
// 绘制旋转后的图像
g2d.setTransform(transform);
g2d.drawImage(inputImage, 0, 0, null);
g2d.dispose();
// 保存旋转后的图片
String formatName = outputImagePath.substring(outputImagePath.lastIndexOf(".") + 1);
ImageIO.write(outputImage, formatName, new File(outputImagePath));
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
rotateImage("input.jpg", "output.jpg", 45); // 旋转45度
}
}
使用第三方库旋转图片
除了使用Java标准库,还可以使用第三方库如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) // 旋转90度
.toFile(new File("output.jpg"));
}
}
注意事项
旋转图片时需要考虑图片的原始宽高比,否则可能导致图片被裁剪或出现空白区域。对于非90度倍数的旋转,图片尺寸会发生变化,需要重新计算输出图片的尺寸。
图片旋转操作会消耗较多内存,特别是处理大尺寸图片时,建议对图片进行适当压缩或分块处理。







