From be5a5c411ad18133b17cc900519390c985ac27f9 Mon Sep 17 00:00:00 2001 From: wangdz50 Date: Wed, 1 Mar 2023 13:42:25 +0800 Subject: [PATCH 1/2] =?UTF-8?q?[fixbug]:=20=20=E4=BF=AE=E5=A4=8D=E5=9B=BE?= =?UTF-8?q?=E7=89=87=E5=8E=8B=E7=BC=A9=E8=87=AA=E5=8A=A8=E6=97=8B=E8=BD=AC?= =?UTF-8?q?=E9=97=AE=E9=A2=98=20#2923?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hutool-swing/pom.xml | 5 ++ .../cn/hutool/swing/img/ImgRevolveUtil.java | 88 +++++++++++++++++++ .../java/cn/hutool/swing/img/ImgUtil.java | 2 +- 3 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 hutool-swing/src/main/java/cn/hutool/swing/img/ImgRevolveUtil.java diff --git a/hutool-swing/pom.xml b/hutool-swing/pom.xml index 604b363ee..c1b882fa0 100755 --- a/hutool-swing/pom.xml +++ b/hutool-swing/pom.xml @@ -22,5 +22,10 @@ hutool-core ${project.parent.version} + + com.drewnoakes + metadata-extractor + 2.18.0 + diff --git a/hutool-swing/src/main/java/cn/hutool/swing/img/ImgRevolveUtil.java b/hutool-swing/src/main/java/cn/hutool/swing/img/ImgRevolveUtil.java new file mode 100644 index 000000000..42e355471 --- /dev/null +++ b/hutool-swing/src/main/java/cn/hutool/swing/img/ImgRevolveUtil.java @@ -0,0 +1,88 @@ +package cn.hutool.swing.img; + +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.IORuntimeException; + +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.*; + +import com.drew.imaging.ImageMetadataReader; +import com.drew.imaging.ImageProcessingException; +import com.drew.metadata.Directory; +import com.drew.metadata.Metadata; +import com.drew.metadata.Tag; + +/** + * 图片避免旋转工具类 + * + *@Date: 2023/2/28 19:21
+ * @author wdz + * @since 5.8.13 + */ +public class ImgRevolveUtil { + /** + * 纠正图片旋转 + * + * @param srcFile + */ + public static BufferedImage correctBufferImg(File srcFile) throws IOException, ImageProcessingException { + // 获取偏转角度 + int angle = getAngle(srcFile); + //如果不偏转,直接返回即可 + if (angle != 90 && angle != 270) { + return ImageIO.read(srcFile); + } + + // 原始图片缓存 + BufferedImage srcImg = ImageIO.read(srcFile); + + // 宽高互换 + // 原始宽度 + int imgWidth = srcImg.getHeight(); + // 原始高度 + int imgHeight = srcImg.getWidth(); + + // 中心点位置 + double centerWidth = ((double) imgWidth) / 2; + double centerHeight = ((double) imgHeight) / 2; + + // 图片缓存 + BufferedImage targetImg = new BufferedImage(imgWidth, imgHeight, BufferedImage.TYPE_INT_RGB); + + // 旋转对应角度 + Graphics2D g = targetImg.createGraphics(); + g.rotate(Math.toRadians(angle), centerWidth, centerHeight); + g.drawImage(srcImg, (imgWidth - srcImg.getWidth()) / 2, (imgHeight - srcImg.getHeight()) / 2, null); + g.rotate(Math.toRadians(-angle), centerWidth, centerHeight); + g.dispose(); + return targetImg; + } + + + /** + * 获取图片旋转角度 + * + * @param file 上传图片 + * @return + */ + public static int getAngle(File file) throws ImageProcessingException, IOException { + Metadata metadata = ImageMetadataReader.readMetadata(file); + for (Directory directory : metadata.getDirectories()) { + for (Tag tag : directory.getTags()) { + if ("Orientation".equals(tag.getTagName())) { + String orientation = tag.getDescription(); + if (orientation.contains("90")) { + return 90; + } else if (orientation.contains("180")) { + return 180; + } else if (orientation.contains("270")) { + return 270; + } + } + } + } + return 0; + } +} diff --git a/hutool-swing/src/main/java/cn/hutool/swing/img/ImgUtil.java b/hutool-swing/src/main/java/cn/hutool/swing/img/ImgUtil.java index 1ab5ab80b..08ee070a4 100755 --- a/hutool-swing/src/main/java/cn/hutool/swing/img/ImgUtil.java +++ b/hutool-swing/src/main/java/cn/hutool/swing/img/ImgUtil.java @@ -1631,7 +1631,7 @@ public class ImgUtil { public static BufferedImage read(final File imageFile) { final BufferedImage result; try { - result = ImageIO.read(imageFile); + result = ImgRevolveUtil.correctBufferImg(imageFile); } catch (final IOException e) { throw new IORuntimeException(e); } From c7f17f0119b975230a33c21eaecdfd064cfc127c Mon Sep 17 00:00:00 2001 From: wangdz50 Date: Wed, 1 Mar 2023 18:53:26 +0800 Subject: [PATCH 2/2] =?UTF-8?q?[fixbug]:=20optional=20=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E4=B8=BAtrue=20=E8=A1=A8=E7=A4=BA=E8=AF=A5=E4=BE=9D=E8=B5=96?= =?UTF-8?q?=E6=98=AF=E5=8F=AF=E9=80=89=E7=9A=84=20=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E4=B9=8B=E9=97=B4=E4=BE=9D=E8=B5=96=E4=B8=8D=E4=BC=A0=E9=80=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hutool-swing/pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/hutool-swing/pom.xml b/hutool-swing/pom.xml index c1b882fa0..c3efd8841 100755 --- a/hutool-swing/pom.xml +++ b/hutool-swing/pom.xml @@ -26,6 +26,7 @@ com.drewnoakes metadata-extractor 2.18.0 + true