diff --git a/src/main/java/com/ycwl/basic/image/watermark/edge/LeicaWatermarkTemplateBuilder.java b/src/main/java/com/ycwl/basic/image/watermark/edge/LeicaWatermarkTemplateBuilder.java index 02b45f64..38f71543 100644 --- a/src/main/java/com/ycwl/basic/image/watermark/edge/LeicaWatermarkTemplateBuilder.java +++ b/src/main/java/com/ycwl/basic/image/watermark/edge/LeicaWatermarkTemplateBuilder.java @@ -12,8 +12,8 @@ import java.util.Map; * 对应 LeicaWatermarkOperator * * 布局说明: - * - 画布高度 = 原图高度 + 底部扩展区域(白色背景) - * - 原图放在画布顶部 + * - 画布大小 = 原图大小(不扩展) + * - 原图收缩放在画布上半部分,底部留出空间 * - 底部白色区域左侧:帧途 Logo + "帧途" 文字 * - 底部白色区域右侧:二维码(含头像)+ 景区名 + 日期时间 */ @@ -53,9 +53,14 @@ public class LeicaWatermarkTemplateBuilder extends AbstractWatermarkTemplateBuil int imageWidth = request.getImageWidth(); int imageHeight = request.getImageHeight(); - // 画布高度 = 原图高度 + 底部扩展区域 + // 画布大小 = 原图大小(不扩展) int canvasWidth = imageWidth; - int canvasHeight = imageHeight + EXTRA_BOTTOM_PX; + int canvasHeight = imageHeight; + + // 原图收缩后的区域高度 + int shrunkImageHeight = imageHeight - EXTRA_BOTTOM_PX; + // 底部区域起始 Y 坐标 + int bottomAreaY = shrunkImageHeight; // 创建模板(白色背景) PuzzleTemplateEntity template = createTemplateWithColor( @@ -68,18 +73,18 @@ public class LeicaWatermarkTemplateBuilder extends AbstractWatermarkTemplateBuil List elements = newElementList(); Map dynamicData = newDynamicData(); - // 1. 原图元素(放在画布顶部) + // 1. 原图元素(收缩放在画布上半部分) PuzzleElementEntity originalImageElement = createImageElement( "originalImage", "原图", 0, 0, - imageWidth, imageHeight, 1, + imageWidth, shrunkImageHeight, 1, FIT_MODE_COVER, null, null ); elements.add(originalImageElement); dynamicData.put("originalImage", request.getOriginalImageUrl()); // 2. Logo 元素(底部左侧) - int logoY = imageHeight + OFFSET_Y + LOGO_EXTRA_BORDER; + int logoY = bottomAreaY + OFFSET_Y + LOGO_EXTRA_BORDER; PuzzleElementEntity logoElement = createImageElement( "logo", "Logo", OFFSET_X, logoY - 12, @@ -91,7 +96,7 @@ public class LeicaWatermarkTemplateBuilder extends AbstractWatermarkTemplateBuil // 3. "帧途" 文字(Logo 右边) int logoTextX = OFFSET_X + LOGO_SIZE + 5; - int logoTextY = imageHeight + OFFSET_Y + LOGO_EXTRA_BORDER; + int logoTextY = bottomAreaY + OFFSET_Y + LOGO_EXTRA_BORDER; PuzzleElementEntity logoTextElement = createTextElement( "logoText", "帧途文字", logoTextX, logoTextY, @@ -113,7 +118,7 @@ public class LeicaWatermarkTemplateBuilder extends AbstractWatermarkTemplateBuil ); int qrcodeX = canvasWidth - OFFSET_X - qrcodeWidth - QRCODE_OFFSET_X - estimatedTextWidth; - int qrcodeY = imageHeight + OFFSET_Y - QRCODE_OFFSET_Y; + int qrcodeY = bottomAreaY + OFFSET_Y - QRCODE_OFFSET_Y; // 5. 二维码元素 PuzzleElementEntity qrcodeElement = createImageElement(