feat(image): 添加图片180度旋转功能

- 新增rotateImage180方法实现图片180度旋转
- 支持源文件读取和目标文件写入
- 使用AffineTransform实现图像旋转变换
- 保持图片原始尺寸不变
- 添加详细的异常处理和资源释放
- 移除对270度旋转的限制检查
This commit is contained in:
2025-11-18 17:32:04 +08:00
parent 208202ba41
commit 3ddf7bd0e9

View File

@@ -193,6 +193,52 @@ public class ImageUtils {
}
}
/**
* 旋转图片180度
*
* @param sourceFile 源图片文件
* @param targetFile 目标图片文件
* @throws IOException 读取或写入文件失败
*/
public static void rotateImage180(File sourceFile, File targetFile) throws IOException {
BufferedImage sourceImage = null;
BufferedImage rotatedImage = null;
try {
sourceImage = ImageIO.read(sourceFile);
if (sourceImage == null) {
throw new IOException("无法读取图片文件: " + sourceFile.getPath());
}
int width = sourceImage.getWidth();
int height = sourceImage.getHeight();
// 创建旋转后的图片(宽高不变)
rotatedImage = new BufferedImage(width, height, sourceImage.getType());
Graphics2D g2d = rotatedImage.createGraphics();
// 设置旋转变换
AffineTransform transform = new AffineTransform();
transform.translate(width / 2.0, height / 2.0);
transform.rotate(Math.PI);
transform.translate(-width / 2.0, -height / 2.0);
g2d.setTransform(transform);
g2d.drawImage(sourceImage, 0, 0, null);
g2d.dispose();
// 保存旋转后的图片
ImageIO.write(rotatedImage, "jpg", targetFile);
log.info("图片旋转180度成功,尺寸保持: {}x{}", width, height);
} finally {
if (sourceImage != null) {
sourceImage.flush();
}
if (rotatedImage != null) {
rotatedImage.flush();
}
}
}
/**
* 智能裁切图片以填充目标尺寸,支持自动旋转以减少裁切损失
*
@@ -330,10 +376,6 @@ public class ImageUtils {
return source;
}
if (degrees != 270) {
throw new IllegalArgumentException("仅支持270度旋转");
}
int width = source.getWidth();
int height = source.getHeight();