From 8e2e515af300ba99adfe14ac2daca154a601dd3c Mon Sep 17 00:00:00 2001 From: xupei Date: Wed, 12 Feb 2025 12:13:25 +0800 Subject: [PATCH] =?UTF-8?q?BUGFIX:=E5=8D=B0=E8=8A=B1=20=E4=B8=8D=E7=AD=89?= =?UTF-8?q?=E6=AF=94=E7=BC=A9=E6=94=BE=E9=80=82=E9=85=8D=E5=8E=86=E5=8F=B2?= =?UTF-8?q?=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ai/da/common/utils/MinioUtil.java | 33 ++++++++++++++++--- .../ai/da/service/impl/DesignServiceImpl.java | 32 +++++++++++++----- 2 files changed, 53 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/ai/da/common/utils/MinioUtil.java b/src/main/java/com/ai/da/common/utils/MinioUtil.java index f8b86a51..d3cdc76f 100644 --- a/src/main/java/com/ai/da/common/utils/MinioUtil.java +++ b/src/main/java/com/ai/da/common/utils/MinioUtil.java @@ -14,13 +14,12 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; import java.io.*; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; -import java.util.ArrayList; -import java.util.Base64; -import java.util.List; -import java.util.UUID; +import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -535,6 +534,32 @@ public class MinioUtil { int index = path.indexOf("/"); return path.substring(index + 1); // 获取路径的其余部分作为对象名称 } + + public List getImagesWidthAndHeight(String path){ + int index = path.indexOf("/"); + String bucketName = path.substring(0, index); + String objectName = path.substring(index + 1); + try { + // 从 MinIO 下载图片 + GetObjectResponse response = minioClient.getObject( + GetObjectArgs.builder() + .bucket(bucketName) + .object(objectName) + .build() + ); + + BufferedImage image = ImageIO.read(response); + int width = image.getWidth(); + int height = image.getHeight(); + + log.info("Image path {}, Width: {}, Height: {}", path, width, height); + response.close(); + return Arrays.asList(width, height); + } catch (MinioException | IOException | NoSuchAlgorithmException | InvalidKeyException e) { + log.error("图片:{}, 获取宽高异常", path); + throw new BusinessException(e.getMessage()); + } + } } diff --git a/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java b/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java index a9a133c2..6322e91c 100644 --- a/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java @@ -1385,14 +1385,14 @@ public class DesignServiceImpl extends ServiceImpl impleme // 判断有无印花 if (CollectionUtil.isNotEmpty(prints)) { // 有印花 - d.setPrintObject(convertToDesignSinglePrintDTO(prints)); + d.setPrintObject(convertToDesignSinglePrintDTO(prints, o.getPath())); } // 根据designItemDetailId获取design elements List trims = designItemDetailPrintService.getByDesignItemDetailId(o.getId(), "trims"); // 判断有无装饰 trims if (CollectionUtil.isNotEmpty(trims)) { // 有印花 - d.setTrims(convertToDesignSinglePrintDTO(trims)); + d.setTrims(convertToDesignSinglePrintDTO(trims, o.getPath())); } })); //single 和 Models(模特)时候 系统元素为空 @@ -1586,7 +1586,7 @@ public class DesignServiceImpl extends ServiceImpl impleme return designItemDetailVO; } - private DesignSinglePrintDTO convertToDesignSinglePrintDTO(List designItemDetailPrints) { + private DesignSinglePrintDTO convertToDesignSinglePrintDTO(List designItemDetailPrints, String sketchPath) { DesignSinglePrintDTO designSinglePrintDTO = new DesignSinglePrintDTO(); List prints = new ArrayList<>(); @@ -1601,25 +1601,41 @@ public class DesignServiceImpl extends ServiceImpl impleme designSinglePrint.setPriority(detailPrint.getPriority()); designSinglePrint.setPath(minioUtil.getPreSignedUrl(detailPrint.getPath(), 24 * 60)); designSinglePrint.setMinIOPath(detailPrint.getPath()); + designSinglePrint.setIfSingle(detailPrint.getSingleOrOverall().equals("single") ? Boolean.TRUE : Boolean.FALSE); List scales; try{ scales = JSONArray.parseArray(detailPrint.getScale(), Float.class); }catch (JSONException e){ - scales = Arrays.asList(Float.valueOf(detailPrint.getScale()), Float.valueOf(detailPrint.getScale())); + Float scale = Float.valueOf(detailPrint.getScale()); + if (designSinglePrint.getIfSingle()){ + List printWAndH = minioUtil.getImagesWidthAndHeight(detailPrint.getPath()); + List sketchWAndH = minioUtil.getImagesWidthAndHeight(sketchPath); + + scales = Arrays.asList(scale * printWAndH.get(0) / sketchWAndH.get(0), scale * printWAndH.get(1) / sketchWAndH.get(1)); + }else { + scales = Arrays.asList(scale, scale); + } } designSinglePrint.setScale(scales); - designSinglePrint.setIfSingle(detailPrint.getSingleOrOverall().equals("single") ? Boolean.TRUE : Boolean.FALSE); prints.add(designSinglePrint); } else { - // single模式下多个印花 + // 多个印花 // designSinglePrintDTO.setIfSingle(Boolean.TRUE); designItemDetailPrints.forEach(print -> { // if (print.getSingleOrOverall().equals("single")) { List scales; + Boolean ifSingle = print.getSingleOrOverall().equals("single") ? Boolean.TRUE : Boolean.FALSE; + Float scale = Float.valueOf(print.getScale()); try{ scales = JSONArray.parseArray(print.getScale(), Float.class); }catch (JSONException e){ - scales = Arrays.asList(Float.valueOf(print.getScale()), Float.valueOf(print.getScale())); + if (ifSingle){ + List printWAndH = minioUtil.getImagesWidthAndHeight(print.getPath()); + List sketchWAndH = minioUtil.getImagesWidthAndHeight(sketchPath); + scales = Arrays.asList(scale * printWAndH.get(0) / sketchWAndH.get(0), scale * printWAndH.get(1) / sketchWAndH.get(1)); + }else { + scales = Arrays.asList(scale, scale); + } } prints.add(new DesignSinglePrint( print.getLevel2Type(), @@ -1629,7 +1645,7 @@ public class DesignServiceImpl extends ServiceImpl impleme scales, print.getAngle(), print.getPriority(), - print.getSingleOrOverall().equals("single") ? Boolean.TRUE : Boolean.FALSE)); + ifSingle)); // } }); }