You've already forked FrameTour-BE
feat(printer): 增加对source.type=3的特殊图片处理流程
- 新增ImageResizeStage、ImageSRStage和UpdateMemberPrintStage处理阶段 - 对type=3的图片增加超分辨率和图像增强处理 - 构建新的处理管线,包含下载、方向校正、超分、增强、上传等12个阶段 - 兼容旧版URL处理逻辑,针对type=3替换缩略图为原图URL - 优化图片来源判断逻辑,增加source实体查询 - 完善处理日志记录和阶段状态控制
This commit is contained in:
@@ -14,8 +14,11 @@ import com.ycwl.basic.image.pipeline.stages.ConditionalRotateStage;
|
||||
import com.ycwl.basic.image.pipeline.stages.DownloadStage;
|
||||
import com.ycwl.basic.image.pipeline.stages.ImageEnhanceStage;
|
||||
import com.ycwl.basic.image.pipeline.stages.ImageOrientationStage;
|
||||
import com.ycwl.basic.image.pipeline.stages.ImageResizeStage;
|
||||
import com.ycwl.basic.image.pipeline.stages.ImageSRStage;
|
||||
import com.ycwl.basic.image.pipeline.stages.PuzzleBorderStage;
|
||||
import com.ycwl.basic.image.pipeline.stages.RestoreOrientationStage;
|
||||
import com.ycwl.basic.image.pipeline.stages.UpdateMemberPrintStage;
|
||||
import com.ycwl.basic.image.pipeline.stages.UploadStage;
|
||||
import com.ycwl.basic.image.pipeline.stages.WatermarkConfig;
|
||||
import com.ycwl.basic.image.pipeline.stages.WatermarkStage;
|
||||
@@ -519,6 +522,10 @@ public class PrinterServiceImpl implements PrinterService {
|
||||
}
|
||||
|
||||
String url = byId.getUrl();
|
||||
// 特殊兼容处理
|
||||
if (Integer.valueOf(3).equals(byId.getType())) {
|
||||
url = byId.getThumbUrl().replace("_t.", "_o.");
|
||||
}
|
||||
MemberPrintEntity entity = new MemberPrintEntity();
|
||||
entity.setMemberId(memberId);
|
||||
entity.setScenicId(scenicId);
|
||||
@@ -788,6 +795,7 @@ public class PrinterServiceImpl implements PrinterService {
|
||||
.addStage(new ImageOrientationStage())
|
||||
.addStage(new ConditionalRotateStage())
|
||||
.addStage(new ImageEnhanceStage(config)) // 通过setStageState方法设置是否启用
|
||||
.addStage(new ImageResizeStage(2.0 / 3.0)) // 缩小2/3倍(回到原分辨率)
|
||||
.addStage(new WatermarkStage(watermarkConfig))
|
||||
.addStage(new RestoreOrientationStage())
|
||||
.addStage(new UploadStage())
|
||||
@@ -827,11 +835,10 @@ public class PrinterServiceImpl implements PrinterService {
|
||||
// 设置管线场景为图片打印
|
||||
context.setScene(PipelineScene.IMAGE_PRINT);
|
||||
|
||||
// 根据sourceId判断图片来源
|
||||
// sourceId > 0: IPC设备拍摄
|
||||
// sourceId == null: 手机上传
|
||||
// sourceId == 0: 拼图(暂定为UNKNOWN)
|
||||
// 根据sourceId判断图片来源和source类型
|
||||
SourceEntity source = null;
|
||||
if (item.getSourceId() != null && item.getSourceId() > 0) {
|
||||
source = sourceMapper.getEntity(item.getSourceId());
|
||||
context.setSource(ImageSource.IPC);
|
||||
} else if (item.getSourceId() == null) {
|
||||
context.setSource(ImageSource.PHONE);
|
||||
@@ -840,15 +847,50 @@ public class PrinterServiceImpl implements PrinterService {
|
||||
}
|
||||
|
||||
Pipeline<PhotoProcessContext> pipeline;
|
||||
if (context.getImageType() == ImageType.NORMAL_PHOTO) {
|
||||
|
||||
// 特殊处理: sourceId > 0 且 source.type == 3
|
||||
if (source != null && source.getType() != null && source.getType() == 3) {
|
||||
// Type=3的特殊处理流程
|
||||
log.info("检测到source.type=3, 使用特殊处理管线: sourceId={}", item.getSourceId());
|
||||
|
||||
// 准备百度云配置
|
||||
BceEnhancerConfig bceConfig = new BceEnhancerConfig();
|
||||
bceConfig.setQps(1);
|
||||
bceConfig.setAppId("119554288");
|
||||
bceConfig.setApiKey("OX6QoijgKio3eVtA0PiUVf7f");
|
||||
bceConfig.setSecretKey("dYatXReVriPeiktTjUblhfubpcmYfuMk");
|
||||
|
||||
// 准备水印配置
|
||||
WatermarkConfig watermarkConfig = prepareWatermarkConfig(context, qrCodeFile);
|
||||
// 准备存储适配器
|
||||
prepareStorageAdapter(context);
|
||||
// 创建普通照片管线
|
||||
context.enableStage("image_sr");
|
||||
context.enableStage("image_enhance");
|
||||
|
||||
// 构建特殊管线: 放大1.5倍 -> 超分(2倍) -> 增强 -> 更新MemberPrint -> 缩小3倍 -> 水印 -> 上传
|
||||
pipeline = new PipelineBuilder<PhotoProcessContext>("Type3Pipeline")
|
||||
.addStage(new DownloadStage()) // 1. 下载图片
|
||||
.addStage(new ImageOrientationStage()) // 2. 检测方向
|
||||
.addStage(new ConditionalRotateStage()) // 3. 条件性旋转
|
||||
.addStage(new ImageSRStage(bceConfig)) // 4. 超分辨率(2倍放大)
|
||||
.addStage(new ImageEnhanceStage(bceConfig)) // 5. 图像增强
|
||||
.addStage(new UploadStage()) // 6. 上传(用于更新MemberPrint)
|
||||
.addStage(new UpdateMemberPrintStage(printerMapper, // 7. 更新MemberPrint的cropUrl
|
||||
item.getId(), item.getMemberId(), scenicId))
|
||||
.addStage(new ImageResizeStage(4.0 / 3.0)) // 8. 缩小3倍(回到原分辨率)
|
||||
.addStage(new WatermarkStage(watermarkConfig)) // 9. 添加水印
|
||||
.addStage(new RestoreOrientationStage()) // 10. 恢复方向
|
||||
.addStage(new UploadStage()) // 11. 最终上传
|
||||
.addStage(new CleanupStage()) // 12. 清理
|
||||
.build();
|
||||
|
||||
} else if (context.getImageType() == ImageType.NORMAL_PHOTO) {
|
||||
// 普通照片处理流程
|
||||
WatermarkConfig watermarkConfig = prepareWatermarkConfig(context, qrCodeFile);
|
||||
prepareStorageAdapter(context);
|
||||
pipeline = createNormalPhotoPipeline(watermarkConfig);
|
||||
} else {
|
||||
// 拼图
|
||||
// 拼图处理流程
|
||||
prepareStorageAdapter(context);
|
||||
pipeline = createPuzzlePipeline();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user