diff --git a/src/main/java/com/ycwl/basic/service/printer/impl/PrinterServiceImpl.java b/src/main/java/com/ycwl/basic/service/printer/impl/PrinterServiceImpl.java index 01590c07..67e7c0c0 100644 --- a/src/main/java/com/ycwl/basic/service/printer/impl/PrinterServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/printer/impl/PrinterServiceImpl.java @@ -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 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("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(); }