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 1eede0a8..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,23 +1601,51 @@ public class DesignServiceImpl extends ServiceImpl impleme designSinglePrint.setPriority(detailPrint.getPriority()); designSinglePrint.setPath(minioUtil.getPreSignedUrl(detailPrint.getPath(), 24 * 60)); designSinglePrint.setMinIOPath(detailPrint.getPath()); - designSinglePrint.setScale(JSONArray.parseArray(detailPrint.getScale(), Float.class)); designSinglePrint.setIfSingle(detailPrint.getSingleOrOverall().equals("single") ? Boolean.TRUE : Boolean.FALSE); + List scales; + try{ + scales = JSONArray.parseArray(detailPrint.getScale(), Float.class); + }catch (JSONException e){ + 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); 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){ + 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(), minioUtil.getPreSignedUrl(print.getPath(), 24 * 60), print.getPath(), JSONArray.parseArray(print.getPosition(), Float.class), - JSONArray.parseArray(print.getScale(), Float.class), + scales, print.getAngle(), print.getPriority(), - print.getSingleOrOverall().equals("single") ? Boolean.TRUE : Boolean.FALSE)); + ifSingle)); // } }); }