From 443b557623367f2cc81d035c5055aba6485a5011 Mon Sep 17 00:00:00 2001 From: xupei Date: Wed, 25 Jun 2025 17:10:56 +0800 Subject: [PATCH 1/5] =?UTF-8?q?BUGFIX:1=E3=80=81design=20=E6=B8=90?= =?UTF-8?q?=E5=8F=98=E8=89=B2=E6=B2=A1=E5=AD=98=202=E3=80=81=E5=B1=95?= =?UTF-8?q?=E7=A4=BA=E6=96=87=E6=9C=AC=E6=9B=B4=E6=96=B0=203=E3=80=81?= =?UTF-8?q?=E5=8F=96=E6=B6=88=E6=8B=BC=E8=B4=B4=E5=9B=BE=E5=85=A5=E5=8F=82?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ai/da/service/impl/CollectionServiceImpl.java | 6 +----- .../java/com/ai/da/service/impl/GenerateServiceImpl.java | 2 +- .../com/ai/da/service/impl/UserLikeGroupServiceImpl.java | 4 ++++ src/main/resources/messages_en.properties | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/ai/da/service/impl/CollectionServiceImpl.java b/src/main/java/com/ai/da/service/impl/CollectionServiceImpl.java index af14e0c7..1969faa5 100644 --- a/src/main/java/com/ai/da/service/impl/CollectionServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/CollectionServiceImpl.java @@ -280,11 +280,7 @@ public class CollectionServiceImpl extends ServiceImpl i */ @Transactional(rollbackFor = Exception.class) public GenerateResultVO sketchReconstructionGenerate(SketchReconstructionDTO sketchReconstructionDTO){ - log.info("sketchReconstructionGenerate params: {}", sketchReconstructionDTO); +// log.info("sketchReconstructionGenerate params: {}", sketchReconstructionDTO); Long accountId = UserContext.getUserHolder().getId(); // 1、线稿生成 diff --git a/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java b/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java index ecc19384..21d145cd 100644 --- a/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java @@ -2128,6 +2128,10 @@ public class UserLikeGroupServiceImpl extends ServiceImpl Date: Wed, 25 Jun 2025 17:20:35 +0800 Subject: [PATCH 2/5] =?UTF-8?q?BUGFIX:=E6=89=B9=E9=87=8F=E7=94=9F=E6=88=90?= =?UTF-8?q?=EF=BC=8C=E8=8E=B7=E5=8F=96design=E7=9A=84=E7=BB=93=E6=9E=9C?= =?UTF-8?q?=E4=B8=AD=E7=BC=BA=E5=A4=B1ResultType?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/ai/da/service/impl/DesignServiceImpl.java | 1 + 1 file changed, 1 insertion(+) 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 c928aab7..819639c3 100644 --- a/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java @@ -2790,6 +2790,7 @@ public class DesignServiceImpl extends ServiceImpl impleme vo.setDesignOutfitId(tDesignPythonOutfit.getId()); vo.setDesignOutfitUrl(minioUtil.getPreSignedUrl(tDesignPythonOutfit.getDesignUrl(), 24 * 60)); vo.setDesignItemId(tDesignPythonOutfit.getDesignItemId()); + vo.setResultType(CollectionType.DESIGN.getValue()); voList.add(vo); } result.setDesign(voList); From 89457b0593eeffda90e501d0cc3f8bc9ea3de4b4 Mon Sep 17 00:00:00 2001 From: xupei Date: Wed, 25 Jun 2025 18:43:52 +0800 Subject: [PATCH 3/5] =?UTF-8?q?TASK:=20=E4=BD=BF=E7=94=A8Flux=E7=94=9F?= =?UTF-8?q?=E6=88=90=E5=89=8D=EF=BC=8Cto=20Product=20Image=EF=BC=8C?= =?UTF-8?q?=E4=B8=BA=E8=BE=93=E5=85=A5=E9=80=8F=E6=98=8E=E5=9B=BE=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E7=99=BD=E8=89=B2=E8=83=8C=E6=99=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ai/da/common/utils/MinioUtil.java | 68 +++++++++++++++++++ .../da/service/impl/GenerateServiceImpl.java | 20 +++++- 2 files changed, 87 insertions(+), 1 deletion(-) 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 1dc16740..d41462d3 100644 --- a/src/main/java/com/ai/da/common/utils/MinioUtil.java +++ b/src/main/java/com/ai/da/common/utils/MinioUtil.java @@ -1,6 +1,7 @@ package com.ai.da.common.utils; import com.ai.da.common.config.exception.BusinessException; +import com.ai.da.common.constant.CommonConstant; import com.ai.da.mapper.primary.entity.ObjectItem; import io.minio.*; import io.minio.errors.*; @@ -16,11 +17,14 @@ import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; import javax.imageio.ImageIO; +import java.awt.*; import java.awt.image.BufferedImage; import java.io.*; +import java.net.URL; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.util.*; +import java.util.List; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -675,6 +679,70 @@ public class MinioUtil { } } + public String changeToWhiteBackground(String minioPath){ + try { + // 1. 使用URL读取远程图片 + BufferedImage originalImage = ImageIO.read(new URL(getPreSignedUrl(minioPath, CommonConstant.MINIO_IMAGE_EXPIRE_TIME))); + + // 2. 透明图检查(新增核心逻辑) + if (!hasTransparency(originalImage)) { + log.info("图片 {} 无透明通道,无需添加白底", minioPath); + return null; // 返回空 + } + // 3. 处理图片(例如:转换为白底) + BufferedImage newImage = new BufferedImage( + originalImage.getWidth(), + originalImage.getHeight(), + BufferedImage.TYPE_INT_RGB + ); + + // 4. 填充白色背景 + java.awt.Graphics2D g = newImage.createGraphics(); + g.setColor(java.awt.Color.WHITE); + g.fillRect(0, 0, newImage.getWidth(), newImage.getHeight()); + g.drawImage(originalImage, 0, 0, null); + g.dispose(); + + // 5. 输出为Base64 + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ImageIO.write(newImage, "PNG", baos); + String base64Image = java.util.Base64.getEncoder().encodeToString(baos.toByteArray()); + log.info("为图片 {} 添加白色背景", minioPath); + System.out.println("data:image/png;base64," + base64Image); + return "data:image/png;base64," + base64Image; +// return base64Image; + } catch (Exception e) { + log.error(e.getMessage()); + throw new BusinessException("透明图添加白色背景失败"); + } + } + + /** + * 检测图片是否包含透明通道 + */ + private boolean hasTransparency(BufferedImage image) { + // 情况1:图像本身支持透明(如TYPE_INT_ARGB) + if (image.getTransparency() == Transparency.TRANSLUCENT) { + return true; + } + + // 情况2:检查像素级透明度(适用于TYPE_INT_RGB等格式) + if (image.getColorModel().hasAlpha()) { + // 抽样检查前100x100像素(避免全图扫描的性能问题) + int width = Math.min(image.getWidth(), 100); + int height = Math.min(image.getHeight(), 100); + + for (int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) { + if ((image.getRGB(x, y) >> 24) == 0x00) { + return true; // 发现透明像素 + } + } + } + } + return false; + } + } diff --git a/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java b/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java index ec73827e..e05d18d5 100644 --- a/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java @@ -65,6 +65,7 @@ import java.util.regex.Pattern; import static com.ai.da.common.enums.CollectionLevel1TypeEnum.*; import static com.ai.da.common.enums.CreditsEventsEnum.TO_PRODUCT_IMAGE; +import static com.ai.da.common.enums.CreditsEventsEnum.TO_PRODUCT_IMAGE_FLUX; @Slf4j @Service @@ -2119,7 +2120,13 @@ public class GenerateServiceImpl extends ServiceImpl i if (!StringUtil.isNullOrEmpty(imagePath)){ try { - String imageAsBase64 = minioUtil.getImageAsBase64(imagePath); + String imageAsBase64 = null; + if (func.equals(TO_PRODUCT_IMAGE_FLUX)){ + imageAsBase64 = addWhiteBackground(imagePath); + } + if (StringUtil.isNullOrEmpty(imageAsBase64)){ + imageAsBase64 = minioUtil.getImageAsBase64(imagePath); + } requestBody.set("input_image", imageAsBase64); } catch (IOException e) { log.error("获取图片的base64格式失败,{}", String.valueOf(e)); @@ -2220,5 +2227,16 @@ public class GenerateServiceImpl extends ServiceImpl i } } + private String addWhiteBackground(String minioPath){ + // 1、先通过后缀判断输入图片类型有没有透明通道 + String extension = minioPath.substring(minioPath.lastIndexOf(".") + 1); + // 2、如果有,为其添加白色背景 + if (extension.equals("png")){ + return minioUtil.changeToWhiteBackground(minioPath); + }else { + log.info("图片 {} 没有透明通道, 不用添加白底", minioPath); + return null; + } + } } From 469681b96c3f431c84ee5662219b6c10287558b2 Mon Sep 17 00:00:00 2001 From: xupei Date: Wed, 25 Jun 2025 19:04:29 +0800 Subject: [PATCH 4/5] =?UTF-8?q?BUGFIX:=20=E5=90=91flux=E5=8F=91=E8=B5=B7?= =?UTF-8?q?=E7=94=9F=E6=88=90=E8=AF=B7=E6=B1=82=E6=97=B6=EF=BC=8C=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E6=8C=87=E5=AE=9A=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ai/da/service/impl/UserLikeGroupServiceImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java b/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java index 21d145cd..bc407d92 100644 --- a/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java @@ -497,7 +497,7 @@ public class UserLikeGroupServiceImpl extends ServiceImpl Date: Wed, 25 Jun 2025 19:13:57 +0800 Subject: [PATCH 5/5] =?UTF-8?q?BUGFIX:=20=E5=8E=BB=E9=99=A4base64=E6=8E=A7?= =?UTF-8?q?=E5=88=B6=E5=8F=B0=E8=BE=93=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/ai/da/common/utils/MinioUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 d41462d3..39927ff5 100644 --- a/src/main/java/com/ai/da/common/utils/MinioUtil.java +++ b/src/main/java/com/ai/da/common/utils/MinioUtil.java @@ -708,7 +708,7 @@ public class MinioUtil { ImageIO.write(newImage, "PNG", baos); String base64Image = java.util.Base64.getEncoder().encodeToString(baos.toByteArray()); log.info("为图片 {} 添加白色背景", minioPath); - System.out.println("data:image/png;base64," + base64Image); +// System.out.println("data:image/png;base64," + base64Image); return "data:image/png;base64," + base64Image; // return base64Image; } catch (Exception e) {