java上传图片后会进行旋转的解决办法
时间: 2024-02-10 18:10:33 浏览: 82
解决ios拍照上传图片被旋转
5星 · 资源好评率100%
在Java中,图片上传后可能会自动进行旋转,这是因为图片的Exif信息中包含了旋转信息。解决办法可以通过以下步骤实现:
1.读取图片的Exif信息,获取旋转角度值。
2.根据旋转角度值对图片进行旋转。
3.保存旋转后的图片。
以下是示例代码:
```java
//读取图片的Exif信息
Metadata metadata = ImageMetadataReader.readMetadata(inputStream);
Directory directory = metadata.getFirstDirectoryOfType(ExifIFD0Directory.class);
int orientation = 1;
if (directory != null && directory.containsTag(ExifIFD0Directory.TAG_ORIENTATION)) {
orientation = directory.getInt(ExifIFD0Directory.TAG_ORIENTATION);
}
//根据旋转角度值对图片进行旋转
BufferedImage bufferedImage = ImageIO.read(inputStream);
if (orientation == 6) {
bufferedImage = rotateImage(bufferedImage, 90);
} else if (orientation == 3) {
bufferedImage = rotateImage(bufferedImage, 180);
} else if (orientation == 8) {
bufferedImage = rotateImage(bufferedImage, 270);
}
//保存旋转后的图片
ImageIO.write(bufferedImage, "jpg", outputStream);
```
其中,rotateImage为自定义函数,用于旋转图片,示例代码如下:
```java
public static BufferedImage rotateImage(BufferedImage bufferedimage, int degree) {
int w = bufferedimage.getWidth();
int h = bufferedimage.getHeight();
int type = bufferedimage.getColorModel().getTransparency();
BufferedImage img;
Graphics2D graphics2d;
(graphics2d = (img = new BufferedImage(w, h, type)).createGraphics()).setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2d.rotate(Math.toRadians(degree), w / 2, h / 2);
graphics2d.drawImage(bufferedimage, 0, 0, null);
graphics2d.dispose();
return img;
}
```
这样就可以解决Java上传图片后自动旋转的问题了。
阅读全文