From 426f2ac18f30bbf0b94ce7086725e5c07bab60ae Mon Sep 17 00:00:00 2001 From: zhaokai Date: Wed, 11 Mar 2026 10:13:28 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=AF=BC=E5=87=BA=E4=B8=80?= =?UTF-8?q?=E4=BA=BA=E4=B8=80=E6=A1=A3=E4=BA=BA=E8=84=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 5 +++ .../query/archives/ArchivesQueryExe.java | 10 +++-- .../zcloud/edu/domain/utils/ImageUtil.java | 43 +++++++++++++++++++ 3 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 web-domain/src/main/java/com/zcloud/edu/domain/utils/ImageUtil.java diff --git a/pom.xml b/pom.xml index 24f1ac1..98e740b 100644 --- a/pom.xml +++ b/pom.xml @@ -59,6 +59,11 @@ poi-tl 1.12.2 + + net.coobird + thumbnailator + 0.4.20 + com.jjb.saas jjb-saas-system-client diff --git a/web-app/src/main/java/com/zcloud/edu/command/query/archives/ArchivesQueryExe.java b/web-app/src/main/java/com/zcloud/edu/command/query/archives/ArchivesQueryExe.java index 377bd22..f970615 100644 --- a/web-app/src/main/java/com/zcloud/edu/command/query/archives/ArchivesQueryExe.java +++ b/web-app/src/main/java/com/zcloud/edu/command/query/archives/ArchivesQueryExe.java @@ -23,6 +23,7 @@ import com.zcloud.edu.domain.model.archives.ClassArchivesE; import com.zcloud.edu.domain.model.archives.PersonArchivesE; import com.zcloud.edu.domain.model.study.*; import com.zcloud.edu.domain.utils.FixedPictureUtils; +import com.zcloud.edu.domain.utils.ImageUtil; import com.zcloud.edu.dto.archives.ArchivesPdfFilePageQry; import com.zcloud.edu.dto.archives.ArchivesQry; import com.zcloud.edu.dto.clientobject.archives.ArchivesPdfFileCO; @@ -912,19 +913,22 @@ public class ArchivesQueryExe { Map itemMap = PropertyUtils.describe(item); if(!ObjectUtils.isEmpty(item.getSignFaceUrl())){ // PictureRenderData signPicture = Pictures.ofUrl(fileUrlConfig.getPrefixUrl() + item.getSignFaceUrl(), PictureType.JPEG).size(50, 50).create();//网络图片地址 - PictureRenderData signPicture = FixedPictureUtils.ofNormalUrl(fileUrlConfig.getPrefixUrl() + item.getSignFaceUrl(), 50, 50); +// PictureRenderData signPicture = FixedPictureUtils.ofNormalUrl(fileUrlConfig.getPrefixUrl() + item.getSignFaceUrl(), 50, 50); + PictureRenderData signPicture = ImageUtil.createWithThumbnailator(fileUrlConfig.getPrefixUrl() + item.getSignFaceUrl(), 50, 50); itemMap.put("signPicture", signPicture); } if(!ObjectUtils.isEmpty(item.getExamFaceUrl())){ // PictureRenderData examPicture = Pictures.ofUrl(fileUrlConfig.getPrefixUrl() + item.getExamFaceUrl(), PictureType.JPEG).size(50, 50).create();//网络图片地址 - PictureRenderData examPicture = FixedPictureUtils.ofNormalUrl(fileUrlConfig.getPrefixUrl() + item.getExamFaceUrl(), 50, 50); +// PictureRenderData examPicture = FixedPictureUtils.ofNormalUrl(fileUrlConfig.getPrefixUrl() + item.getExamFaceUrl(), 50, 50); + PictureRenderData examPicture = ImageUtil.createWithThumbnailator(fileUrlConfig.getPrefixUrl() + item.getExamFaceUrl(), 50, 50); itemMap.put("examPicture", examPicture); } if(!ObjectUtils.isEmpty(item.getUserAvatarUrl())){ // PictureRenderData facePicture = Pictures.ofUrl(fileUrlConfig.getPrefixUrl() + item.getUserAvatarUrl(), PictureType.JPEG).size(50, 50).style("rotation:90;").create();//网络图片地址 - PictureRenderData facePicture = FixedPictureUtils.ofNormalUrl(fileUrlConfig.getPrefixUrl() + item.getUserAvatarUrl(), 50, 50); +// PictureRenderData facePicture = FixedPictureUtils.ofNormalUrl(fileUrlConfig.getPrefixUrl() + item.getUserAvatarUrl(), 50, 50); + PictureRenderData facePicture = ImageUtil.createWithThumbnailator(fileUrlConfig.getPrefixUrl() + item.getUserAvatarUrl(), 50, 50); itemMap.put("facePicture", facePicture); } diff --git a/web-domain/src/main/java/com/zcloud/edu/domain/utils/ImageUtil.java b/web-domain/src/main/java/com/zcloud/edu/domain/utils/ImageUtil.java new file mode 100644 index 0000000..25b96d7 --- /dev/null +++ b/web-domain/src/main/java/com/zcloud/edu/domain/utils/ImageUtil.java @@ -0,0 +1,43 @@ +package com.zcloud.edu.domain.utils; + +import com.deepoove.poi.data.PictureRenderData; +import com.deepoove.poi.data.PictureType; +import com.deepoove.poi.data.Pictures; +import net.coobird.thumbnailator.Thumbnails; + +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.ByteArrayOutputStream; +import java.net.URL; +import net.coobird.thumbnailator.Thumbnails; +import net.coobird.thumbnailator.geometry.Positions; +public class ImageUtil { + public static PictureRenderData createWithThumbnailator(String imageUrl, int width, int height) { + try { + // 下载原图 + URL url = new URL(imageUrl); + BufferedImage original = ImageIO.read(url); + + // 使用Thumbnailator处理 - 一行代码搞定旋转和缩放 + BufferedImage processed = Thumbnails.of(original) + .size(width, height) + .rotate(180) // 如果需要固定旋转,可以直接指定 + .asBufferedImage(); + + // 或者使用EXIF自动旋转(如果Thumbnailator版本支持) + // Thumbnails.of(original).scale(1.0).useExifOrientation().asBufferedImage(); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ImageIO.write(processed, "jpg", baos); + + return Pictures.ofBytes(baos.toByteArray(), PictureType.JPEG) + .size(width, height) + .create(); + + } catch (Exception e) { + return Pictures.ofUrl(imageUrl, PictureType.JPEG) + .size(width, height) + .create(); + } + } +}