ImageIO 实现图片 90° 180° 270°转置
时间: 2023-08-28 11:05:06 浏览: 111
使用 Java 的 ImageIO 类库可以实现图片的旋转操作。下面是一个示例代码,可以将图片顺时针旋转90度、180度和270度:
```java
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class ImageRotation {
public static void main(String[] args) {
String inputImagePath = "input.jpg";
String outputImagePath = "output.jpg";
try {
// 读取输入图片
BufferedImage inputImage = ImageIO.read(new File(inputImagePath));
// 顺时针旋转90度
BufferedImage outputImage90 = rotateImage(inputImage, 90);
ImageIO.write(outputImage90, "jpg", new File(outputImagePath + "_90.jpg"));
// 顺时针旋转180度
BufferedImage outputImage180 = rotateImage(inputImage, 180);
ImageIO.write(outputImage180, "jpg", new File(outputImagePath + "_180.jpg"));
// 顺时针旋转270度
BufferedImage outputImage270 = rotateImage(inputImage, 270);
ImageIO.write(outputImage270, "jpg", new File(outputImagePath + "_270.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
}
private static BufferedImage rotateImage(BufferedImage inputImage, int angle) {
int width = inputImage.getWidth();
int height = inputImage.getHeight();
BufferedImage outputImage = new BufferedImage(height, width, inputImage.getType());
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
switch (angle) {
case 90:
outputImage.setRGB(height - 1 - y, x, inputImage.getRGB(x, y));
break;
case 180:
outputImage.setRGB(width - 1 - x, height - 1 - y, inputImage.getRGB(x, y));
break;
case 270:
outputImage.setRGB(y, width - 1 - x, inputImage.getRGB(x, y));
break;
default:
throw new IllegalArgumentException("Invalid angle.");
}
}
}
return outputImage;
}
}
```
在这个示例代码中,我们首先读取了名为 "input.jpg" 的输入图片,然后使用 `rotateImage` 方法进行旋转操作,最后使用 `ImageIO.write` 方法将旋转后的图片保存到文件系统中。
`rotateImage` 方法接受两个参数,第一个是输入图片,第二个是旋转角度。旋转操作使用嵌套的循环遍历每个像素,并且使用 `setRGB` 方法将像素写入输出图片。在旋转 90 度时,输出图片的宽度和高度互换;在旋转 180 度时,输出图片的像素位置为输入图片的镜像;在旋转 270 度时,输出图片的宽度和高度互换,并且输入图片的像素位置也为输出图片的镜像。