You've already forked FrameTour-BE
feat(printer): 添加拼图打印功能支持
- 在ImageWatermarkOperatorEnum中新增PUZZLE_PRINT类型 - 在WatermarkEdgeService中添加PuzzlePrint水印模板支持 - 修改ImageWatermarkFactory对PUZZLE_PRINT类型的处理逻辑 - 移除PuzzleBorderStage并创建专用的拼图打印处理管线 - 实现createPuzzlePrintPipeline方法用于拼图水印处理 - 添加preparePuzzleWatermarkConfig方法准备拼图专用水印配置 - 更新打印机服务中的拼图处理流程以使用新的水印配置
This commit is contained in:
@@ -20,6 +20,8 @@ public class ImageWatermarkFactory {
|
|||||||
case NORMAL -> new NormalWatermarkOperator();
|
case NORMAL -> new NormalWatermarkOperator();
|
||||||
case LEICA -> new LeicaWatermarkOperator();
|
case LEICA -> new LeicaWatermarkOperator();
|
||||||
case PRINTER_DEFAULT -> new PrinterDefaultWatermarkOperator();
|
case PRINTER_DEFAULT -> new PrinterDefaultWatermarkOperator();
|
||||||
|
case PUZZLE_PRINT -> throw new ImageWatermarkUnsupportedException(
|
||||||
|
"PUZZLE_PRINT 仅支持边缘端处理,请使用 WatermarkEdgeService");
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -290,6 +290,7 @@ public class WatermarkEdgeService {
|
|||||||
case NORMAL -> NormalWatermarkTemplateBuilder.STYLE;
|
case NORMAL -> NormalWatermarkTemplateBuilder.STYLE;
|
||||||
case LEICA -> LeicaWatermarkTemplateBuilder.STYLE;
|
case LEICA -> LeicaWatermarkTemplateBuilder.STYLE;
|
||||||
case PRINTER_DEFAULT -> PrinterDefaultWatermarkTemplateBuilder.STYLE;
|
case PRINTER_DEFAULT -> PrinterDefaultWatermarkTemplateBuilder.STYLE;
|
||||||
|
case PUZZLE_PRINT -> PuzzlePrintWatermarkTemplateBuilder.STYLE;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,8 @@ import lombok.Getter;
|
|||||||
public enum ImageWatermarkOperatorEnum {
|
public enum ImageWatermarkOperatorEnum {
|
||||||
LEICA("leica", "jpg"),
|
LEICA("leica", "jpg"),
|
||||||
NORMAL("normal", "jpg"),
|
NORMAL("normal", "jpg"),
|
||||||
PRINTER_DEFAULT("pDefault", "jpg");
|
PRINTER_DEFAULT("pDefault", "jpg"),
|
||||||
|
PUZZLE_PRINT("puzzle_print", "jpg");
|
||||||
|
|
||||||
private final String type;
|
private final String type;
|
||||||
private final String preferFileType;
|
private final String preferFileType;
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ import com.ycwl.basic.image.pipeline.stages.ImageEnhanceStage;
|
|||||||
import com.ycwl.basic.image.pipeline.stages.ImageOrientationStage;
|
import com.ycwl.basic.image.pipeline.stages.ImageOrientationStage;
|
||||||
import com.ycwl.basic.image.pipeline.stages.ImageResizeStage;
|
import com.ycwl.basic.image.pipeline.stages.ImageResizeStage;
|
||||||
import com.ycwl.basic.image.pipeline.stages.ImageSRStage;
|
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.RestoreOrientationStage;
|
||||||
import com.ycwl.basic.image.pipeline.stages.UpdateMemberPrintStage;
|
import com.ycwl.basic.image.pipeline.stages.UpdateMemberPrintStage;
|
||||||
import com.ycwl.basic.image.pipeline.stages.UploadStage;
|
import com.ycwl.basic.image.pipeline.stages.UploadStage;
|
||||||
@@ -896,12 +895,14 @@ public class PrinterServiceImpl implements PrinterService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建拼图处理管线
|
* 创建拼图打印处理管线(带专用水印)
|
||||||
|
*
|
||||||
|
* @param watermarkConfig 水印配置
|
||||||
*/
|
*/
|
||||||
private Pipeline<PhotoProcessContext> createPuzzlePipeline() {
|
private Pipeline<PhotoProcessContext> createPuzzlePrintPipeline(WatermarkConfig watermarkConfig) {
|
||||||
return new PipelineBuilder<PhotoProcessContext>("PuzzlePipeline")
|
return new PipelineBuilder<PhotoProcessContext>("PuzzlePrintPipeline")
|
||||||
.addStage(new DownloadStage())
|
.addStage(new DownloadStage())
|
||||||
.addStage(new PuzzleBorderStage())
|
.addStage(new WatermarkStage(watermarkConfig))
|
||||||
.addStage(new UploadStage())
|
.addStage(new UploadStage())
|
||||||
.addStage(new CleanupStage())
|
.addStage(new CleanupStage())
|
||||||
.build();
|
.build();
|
||||||
@@ -1002,9 +1003,10 @@ public class PrinterServiceImpl implements PrinterService {
|
|||||||
prepareStorageAdapter(context);
|
prepareStorageAdapter(context);
|
||||||
pipeline = createNormalPhotoPipeline(watermarkConfig);
|
pipeline = createNormalPhotoPipeline(watermarkConfig);
|
||||||
} else {
|
} else {
|
||||||
// 拼图处理流程
|
// 拼图处理流程(使用专用水印)
|
||||||
|
WatermarkConfig watermarkConfig = preparePuzzleWatermarkConfig(context, qrCodeFile);
|
||||||
prepareStorageAdapter(context);
|
prepareStorageAdapter(context);
|
||||||
pipeline = createPuzzlePipeline();
|
pipeline = createPuzzlePrintPipeline(watermarkConfig);
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean success = pipeline.execute(context);
|
boolean success = pipeline.execute(context);
|
||||||
@@ -1064,6 +1066,36 @@ public class PrinterServiceImpl implements PrinterService {
|
|||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 准备拼图打印的水印配置
|
||||||
|
* 使用拼图专用水印模板
|
||||||
|
*
|
||||||
|
* @param context 照片处理上下文
|
||||||
|
* @param qrCodeFile 二维码文件
|
||||||
|
* @return WatermarkConfig
|
||||||
|
*/
|
||||||
|
private WatermarkConfig preparePuzzleWatermarkConfig(PhotoProcessContext context, File qrCodeFile) {
|
||||||
|
ScenicConfigManager scenicConfig = context.getScenicConfigManager();
|
||||||
|
|
||||||
|
String scenicText = scenicConfig != null
|
||||||
|
? scenicConfig.getString("print_watermark_scenic_text", "")
|
||||||
|
: "";
|
||||||
|
String dateFormat = scenicConfig != null
|
||||||
|
? scenicConfig.getString("print_watermark_dt_format", "yyyy.MM.dd")
|
||||||
|
: "yyyy.MM.dd";
|
||||||
|
|
||||||
|
return WatermarkConfig.builder()
|
||||||
|
.watermarkType(ImageWatermarkOperatorEnum.PUZZLE_PRINT)
|
||||||
|
.scenicText(scenicText)
|
||||||
|
.dateFormat(dateFormat)
|
||||||
|
.edgeService(watermarkEdgeService)
|
||||||
|
.storageAdapter(StorageFactory.use())
|
||||||
|
.edgeEnabled(true)
|
||||||
|
.qrcodeFile(qrCodeFile)
|
||||||
|
.scale(1.0)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 准备存储适配器
|
* 准备存储适配器
|
||||||
* 从context中的scenicConfigManager获取配置
|
* 从context中的scenicConfigManager获取配置
|
||||||
|
|||||||
Reference in New Issue
Block a user