java 如何旋转图片
旋转图片的方法
在Java中,可以使用BufferedImage和AffineTransform类来实现图片旋转。以下是具体实现步骤:
使用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"等其他格式。







