You've already forked FrameTour-BE
refactor(watermark): 调整徕卡水印模板构建器的画布布局策略
- 画布大小改为原图大小(不再扩展底部区域) - 原图收缩后放置在画布上半部分,为底部留出空间 - 计算原图收缩后的区域高度和底部区域起始Y坐标 - 将原图元素从画布顶部调整为收缩后放在画布上半部分 - 调整Logo、帧途文字和二维码元素的Y坐标计算方式 - 更新布局说明文档以反映新的设计策略
This commit is contained in:
@@ -12,8 +12,8 @@ import java.util.Map;
|
|||||||
* 对应 LeicaWatermarkOperator
|
* 对应 LeicaWatermarkOperator
|
||||||
*
|
*
|
||||||
* 布局说明:
|
* 布局说明:
|
||||||
* - 画布高度 = 原图高度 + 底部扩展区域(白色背景)
|
* - 画布大小 = 原图大小(不扩展)
|
||||||
* - 原图放在画布顶部
|
* - 原图收缩放在画布上半部分,底部留出空间
|
||||||
* - 底部白色区域左侧:帧途 Logo + "帧途" 文字
|
* - 底部白色区域左侧:帧途 Logo + "帧途" 文字
|
||||||
* - 底部白色区域右侧:二维码(含头像)+ 景区名 + 日期时间
|
* - 底部白色区域右侧:二维码(含头像)+ 景区名 + 日期时间
|
||||||
*/
|
*/
|
||||||
@@ -53,9 +53,14 @@ public class LeicaWatermarkTemplateBuilder extends AbstractWatermarkTemplateBuil
|
|||||||
int imageWidth = request.getImageWidth();
|
int imageWidth = request.getImageWidth();
|
||||||
int imageHeight = request.getImageHeight();
|
int imageHeight = request.getImageHeight();
|
||||||
|
|
||||||
// 画布高度 = 原图高度 + 底部扩展区域
|
// 画布大小 = 原图大小(不扩展)
|
||||||
int canvasWidth = imageWidth;
|
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(
|
PuzzleTemplateEntity template = createTemplateWithColor(
|
||||||
@@ -68,18 +73,18 @@ public class LeicaWatermarkTemplateBuilder extends AbstractWatermarkTemplateBuil
|
|||||||
List<PuzzleElementEntity> elements = newElementList();
|
List<PuzzleElementEntity> elements = newElementList();
|
||||||
Map<String, String> dynamicData = newDynamicData();
|
Map<String, String> dynamicData = newDynamicData();
|
||||||
|
|
||||||
// 1. 原图元素(放在画布顶部)
|
// 1. 原图元素(收缩放在画布上半部分)
|
||||||
PuzzleElementEntity originalImageElement = createImageElement(
|
PuzzleElementEntity originalImageElement = createImageElement(
|
||||||
"originalImage", "原图",
|
"originalImage", "原图",
|
||||||
0, 0,
|
0, 0,
|
||||||
imageWidth, imageHeight, 1,
|
imageWidth, shrunkImageHeight, 1,
|
||||||
FIT_MODE_COVER, null, null
|
FIT_MODE_COVER, null, null
|
||||||
);
|
);
|
||||||
elements.add(originalImageElement);
|
elements.add(originalImageElement);
|
||||||
dynamicData.put("originalImage", request.getOriginalImageUrl());
|
dynamicData.put("originalImage", request.getOriginalImageUrl());
|
||||||
|
|
||||||
// 2. Logo 元素(底部左侧)
|
// 2. Logo 元素(底部左侧)
|
||||||
int logoY = imageHeight + OFFSET_Y + LOGO_EXTRA_BORDER;
|
int logoY = bottomAreaY + OFFSET_Y + LOGO_EXTRA_BORDER;
|
||||||
PuzzleElementEntity logoElement = createImageElement(
|
PuzzleElementEntity logoElement = createImageElement(
|
||||||
"logo", "Logo",
|
"logo", "Logo",
|
||||||
OFFSET_X, logoY - 12,
|
OFFSET_X, logoY - 12,
|
||||||
@@ -91,7 +96,7 @@ public class LeicaWatermarkTemplateBuilder extends AbstractWatermarkTemplateBuil
|
|||||||
|
|
||||||
// 3. "帧途" 文字(Logo 右边)
|
// 3. "帧途" 文字(Logo 右边)
|
||||||
int logoTextX = OFFSET_X + LOGO_SIZE + 5;
|
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(
|
PuzzleElementEntity logoTextElement = createTextElement(
|
||||||
"logoText", "帧途文字",
|
"logoText", "帧途文字",
|
||||||
logoTextX, logoTextY,
|
logoTextX, logoTextY,
|
||||||
@@ -113,7 +118,7 @@ public class LeicaWatermarkTemplateBuilder extends AbstractWatermarkTemplateBuil
|
|||||||
);
|
);
|
||||||
|
|
||||||
int qrcodeX = canvasWidth - OFFSET_X - qrcodeWidth - QRCODE_OFFSET_X - estimatedTextWidth;
|
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. 二维码元素
|
// 5. 二维码元素
|
||||||
PuzzleElementEntity qrcodeElement = createImageElement(
|
PuzzleElementEntity qrcodeElement = createImageElement(
|
||||||
|
|||||||
Reference in New Issue
Block a user