You've already forked FrameTour-BE
feat(image): 增强图片处理流程并优化水印逻辑
- 在PhotoProcessContext中新增Stage管理相关方法,支持启用、禁用及批量设置Stage状态 - 新增ImageEnhanceStage并整合到图片处理流水线中 - 重构重打印流程,复用普通照片处理流水线 - 生成订单二维码并用于水印配置 - 移除冗余的水印配置和增强配置代码 - 优化Stage控制逻辑,支持动态启用或禁用特定处理阶段
This commit is contained in:
@@ -1,7 +1,5 @@
|
||||
package com.ycwl.basic.image.pipeline.core;
|
||||
|
||||
import com.ycwl.basic.image.watermark.entity.WatermarkInfo;
|
||||
import com.ycwl.basic.image.watermark.enums.ImageWatermarkOperatorEnum;
|
||||
import com.ycwl.basic.image.pipeline.enums.ImageSource;
|
||||
import com.ycwl.basic.image.pipeline.enums.ImageType;
|
||||
import com.ycwl.basic.image.pipeline.enums.PipelineScene;
|
||||
@@ -198,6 +196,73 @@ public class PhotoProcessContext {
|
||||
return stageEnabledMap.getOrDefault(stageId, defaultEnabled);
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断指定Stage是否启用(默认为false)
|
||||
*
|
||||
* @param stageId Stage唯一标识
|
||||
* @return true-启用, false-禁用
|
||||
*/
|
||||
public boolean isStageEnabled(String stageId) {
|
||||
return stageEnabledMap.getOrDefault(stageId, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置指定Stage的启用状态
|
||||
*
|
||||
* @param stageId Stage唯一标识
|
||||
* @param enabled 是否启用
|
||||
* @return this(支持链式调用)
|
||||
*/
|
||||
public PhotoProcessContext setStageState(String stageId, boolean enabled) {
|
||||
stageEnabledMap.put(stageId, enabled);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 启用指定Stage
|
||||
*
|
||||
* @param stageId Stage唯一标识
|
||||
* @return this(支持链式调用)
|
||||
*/
|
||||
public PhotoProcessContext enableStage(String stageId) {
|
||||
stageEnabledMap.put(stageId, true);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 禁用指定Stage
|
||||
*
|
||||
* @param stageId Stage唯一标识
|
||||
* @return this(支持链式调用)
|
||||
*/
|
||||
public PhotoProcessContext disableStage(String stageId) {
|
||||
stageEnabledMap.put(stageId, false);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量设置Stage启用状态
|
||||
*
|
||||
* @param stages Stage配置Map(stageId -> enabled)
|
||||
* @return this(支持链式调用)
|
||||
*/
|
||||
public PhotoProcessContext setStages(Map<String, Boolean> stages) {
|
||||
if (stages != null) {
|
||||
stageEnabledMap.putAll(stages);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 清空所有Stage配置
|
||||
*
|
||||
* @return this(支持链式调用)
|
||||
*/
|
||||
public PhotoProcessContext clearStages() {
|
||||
stageEnabledMap.clear();
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置最终处理结果URL
|
||||
*/
|
||||
|
||||
@@ -751,10 +751,17 @@ public class PrinterServiceImpl implements PrinterService {
|
||||
* @param watermarkConfig 水印配置
|
||||
*/
|
||||
private Pipeline<PhotoProcessContext> createNormalPhotoPipeline(WatermarkConfig watermarkConfig) {
|
||||
BceEnhancerConfig config = new BceEnhancerConfig();
|
||||
config.setQps(1);
|
||||
config.setAppId("119554288");
|
||||
config.setApiKey("OX6QoijgKio3eVtA0PiUVf7f");
|
||||
config.setSecretKey("dYatXReVriPeiktTjUblhfubpcmYfuMk");
|
||||
|
||||
return new PipelineBuilder<PhotoProcessContext>("NormalPhotoPipeline")
|
||||
.addStage(new DownloadStage())
|
||||
.addStage(new ImageOrientationStage())
|
||||
.addStage(new ConditionalRotateStage())
|
||||
.addStage(new ImageEnhanceStage(config)) // 通过setStageState方法设置是否启用
|
||||
.addStage(new WatermarkStage(watermarkConfig))
|
||||
.addStage(new RestoreOrientationStage())
|
||||
.addStage(new UploadStage())
|
||||
@@ -1352,6 +1359,14 @@ public class PrinterServiceImpl implements PrinterService {
|
||||
|
||||
MemberPrintResp memberPrint = memberPrints.get(0);
|
||||
|
||||
File qrCodeFile = new File("qrCodeFile" + memberPrint.getOrderId() + ".png");
|
||||
MpConfigEntity scenicMpConfig = scenicRepository.getScenicMpConfig(memberPrint.getScenicId());
|
||||
try {
|
||||
WxMpUtil.generateWXAQRCode(scenicMpConfig.getAppId(), scenicMpConfig.getAppSecret(), scenicMpConfig.getState(), "pages/my/orderDetailNew?force=1&id="+memberPrint.getOrderId(), qrCodeFile.getAbsolutePath());
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
// 3. 重新处理照片(带增强选项)
|
||||
Boolean needEnhance = request.getNeedEnhance();
|
||||
if (needEnhance == null) {
|
||||
@@ -1361,6 +1376,7 @@ public class PrinterServiceImpl implements PrinterService {
|
||||
// 3.1 创建图片处理上下文
|
||||
PrinterOrderItem orderItem = PrinterOrderItem.fromMemberPrintResp(memberPrint);
|
||||
PhotoProcessContext context = PhotoProcessContext.fromPrinterOrderItem(orderItem, memberPrint.getScenicId());
|
||||
context.setStageState("image_enhance", needEnhance); // 通过setStageState方法设置是否启用
|
||||
|
||||
// 3.2 设置景区配置和场景
|
||||
ScenicConfigManager scenicConfig = scenicRepository.getScenicConfigManager(memberPrint.getScenicId());
|
||||
@@ -1382,26 +1398,12 @@ public class PrinterServiceImpl implements PrinterService {
|
||||
|
||||
try {
|
||||
if (context.getImageType() == ImageType.NORMAL_PHOTO) {
|
||||
// 准备水印配置(重打印不需要二维码,传 null)
|
||||
WatermarkConfig watermarkConfig = prepareWatermarkConfig(context, null);
|
||||
// 准备水印配置(重打印需要二维码)
|
||||
WatermarkConfig watermarkConfig = prepareWatermarkConfig(context, qrCodeFile);
|
||||
prepareStorageAdapter(context);
|
||||
|
||||
BceEnhancerConfig config = new BceEnhancerConfig();
|
||||
config.setQps(1);
|
||||
config.setAppId("119554288");
|
||||
config.setApiKey("OX6QoijgKio3eVtA0PiUVf7f");
|
||||
config.setSecretKey("dYatXReVriPeiktTjUblhfubpcmYfuMk");
|
||||
// 创建管线,条件性添加增强 Stage
|
||||
pipeline = new PipelineBuilder<PhotoProcessContext>("ReprintPipeline")
|
||||
.addStage(new DownloadStage())
|
||||
.addStage(new ImageOrientationStage())
|
||||
.addStage(new ConditionalRotateStage())
|
||||
.addStageIf(needEnhance, new ImageEnhanceStage(config))
|
||||
.addStage(new WatermarkStage(watermarkConfig))
|
||||
.addStage(new RestoreOrientationStage())
|
||||
.addStage(new UploadStage())
|
||||
.addStage(new CleanupStage())
|
||||
.build();
|
||||
pipeline = createNormalPhotoPipeline(watermarkConfig);
|
||||
} else {
|
||||
// 拼图
|
||||
prepareStorageAdapter(context);
|
||||
|
||||
Reference in New Issue
Block a user