From 61faf40ca4c46d606da51975c8e09142f65b505c Mon Sep 17 00:00:00 2001 From: litianxiang Date: Tue, 18 Nov 2025 15:33:29 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A6=96=E9=A1=B5=E6=8D=A2=E8=84=B8=E5=8F=8A?= =?UTF-8?q?=E5=90=8E=E7=BB=AD=E9=A1=B5=E9=9D=A2=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/TryOnEffectController.java | 29 +++++++++++++++ .../service/TryOnEffectService.java | 4 ++ .../service/impl/TryOnEffectServiceImpl.java | 37 +++++++++++++++++++ 3 files changed, 70 insertions(+) diff --git a/src/main/java/com/aida/lanecarford/controller/TryOnEffectController.java b/src/main/java/com/aida/lanecarford/controller/TryOnEffectController.java index f30c465..067dc85 100644 --- a/src/main/java/com/aida/lanecarford/controller/TryOnEffectController.java +++ b/src/main/java/com/aida/lanecarford/controller/TryOnEffectController.java @@ -1,10 +1,13 @@ package com.aida.lanecarford.controller; import com.aida.lanecarford.common.ApiResponse; +import com.aida.lanecarford.common.response.ResultEnum; import com.aida.lanecarford.entity.Suggestion; import com.aida.lanecarford.entity.TryOnEffect; +import com.aida.lanecarford.exception.BusinessException; import com.aida.lanecarford.service.TryOnEffectService; import com.aida.lanecarford.vo.TryOnResultVo; +import io.netty.util.internal.StringUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -12,6 +15,7 @@ import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; +import javax.annotation.Nullable; import java.util.List; /** @@ -88,4 +92,29 @@ public class TryOnEffectController { tryOnEffectService.addComment(suggestion); return ApiResponse.success(); } + + /** + * 首页默认图换脸演示 + */ + @Operation(summary = "首页点击换脸", description = "传入上传顾客照片后得到的ID") + @PostMapping("/reFace") + public ApiResponse reFace(@Nullable @RequestParam Long customerPhotoId, + @Nullable @RequestParam String prompt, + @Nullable @RequestParam String tryonUrl) { + if (customerPhotoId == null&& StringUtil.isNullOrEmpty(prompt)&& StringUtil.isNullOrEmpty(tryonUrl)){ + return ApiResponse.error("system error:Parameter null"); + } + String result = ""; + if (StringUtil.isNullOrEmpty(prompt)){ + //换脸 + result = tryOnEffectService.reFace(customerPhotoId); + }else { + if (StringUtil.isNullOrEmpty(tryonUrl)){ + return ApiResponse.error("system error:Parameter null"); + } + //根据提示词修改图像 + result = tryOnEffectService.generateUrl(prompt,tryonUrl); + } + return ApiResponse.success(result); + } } \ No newline at end of file diff --git a/src/main/java/com/aida/lanecarford/service/TryOnEffectService.java b/src/main/java/com/aida/lanecarford/service/TryOnEffectService.java index 8f530dc..89ee2e4 100644 --- a/src/main/java/com/aida/lanecarford/service/TryOnEffectService.java +++ b/src/main/java/com/aida/lanecarford/service/TryOnEffectService.java @@ -40,4 +40,8 @@ public interface TryOnEffectService extends IService { * @return 是否添加成功 */ boolean addComment(Suggestion suggestion); + + String reFace(Long customerPhotoId); + + String generateUrl(String prompt, String tryonUrl); } \ No newline at end of file diff --git a/src/main/java/com/aida/lanecarford/service/impl/TryOnEffectServiceImpl.java b/src/main/java/com/aida/lanecarford/service/impl/TryOnEffectServiceImpl.java index e0db2af..7b26884 100644 --- a/src/main/java/com/aida/lanecarford/service/impl/TryOnEffectServiceImpl.java +++ b/src/main/java/com/aida/lanecarford/service/impl/TryOnEffectServiceImpl.java @@ -206,6 +206,43 @@ public class TryOnEffectServiceImpl extends ServiceImpl imageUrls = new ArrayList<>(); + //默认展示图片 + imageUrls.add("lanecarford/try_on_result/default.jpg"); + + if (customerPhotoId != null) { + //根据id查到对应customerurl + CustomerPhoto customerPhoto = customerPhotoService.getById(customerPhotoId); + String customerPhotoUrl = customerPhoto.getPhotoUrl(); + if (customerPhotoUrl != null && !customerPhotoUrl.trim().isEmpty()) { + imageUrls.add(customerPhotoUrl); + } + } + String aiRreultlogicalUrl = callFaceSwapAPI(imageUrls); + String presignedUrl = minioUtil.getPresignedUrl(aiRreultlogicalUrl, CommonConstants.MINIO_PATH_TIMEOUT); + return presignedUrl; + } + + @Override + public String generateUrl(String prompt, String tryonUrl) { + int startIndex = tryonUrl.indexOf("lanecarford"); + String aiRreultlogicalUrl = ""; + if (startIndex != -1) { + // 找到jpg的位置并加上jpg的长度 + int endIndex = tryonUrl.indexOf(".jpg") + ".jpg".length(); + if (endIndex != -1) { + String resultString = tryonUrl.substring(startIndex, endIndex); + aiRreultlogicalUrl = AITryOnEffect(prompt, Arrays.asList(resultString)); + } else { + log.error("不是换脸后的url或者换脸结果有误"); + } + } + return minioUtil.convertToPresignedUrl(aiRreultlogicalUrl, CommonConstants.MINIO_PATH_TIMEOUT); + } + //目前用于customize your look页面点击finish后的显示 @Override public List getTryOnEffectsByStyleId(Long styleId) {