|
|
@@ -36,7 +36,7 @@ class PosterUtil
|
|
|
|
|
|
const SHOP_LOGO_GAP = 12;
|
|
|
|
|
|
- const SHOP_TITLE_SIZE = 30;
|
|
|
+ const SHOP_TITLE_SIZE = 36;
|
|
|
|
|
|
const SHOP_TITLE_MAX_LEN = 18;
|
|
|
|
|
|
@@ -60,18 +60,19 @@ class PosterUtil
|
|
|
|
|
|
const QR_PAD_BOTTOM = 32;
|
|
|
|
|
|
- const QR_HINT_GAP = 14;
|
|
|
+ /** 价格下方:长按识别提示(原二维码旁「微信扫码下单」已取消) */
|
|
|
+ const FOOTER_BUY_HINT = '长按识别小程序购买';
|
|
|
|
|
|
- const SCAN_HINT = '微信扫码下单';
|
|
|
+ const FOOTER_BUY_HINT_SIZE = 26;
|
|
|
|
|
|
- const FOOTER_STAFF_Y = 32;
|
|
|
+ const FOOTER_BUY_HINT_SHADOW = 55;
|
|
|
+
|
|
|
+ const FOOTER_BUY_HINT_Y = 24;
|
|
|
|
|
|
const FOOTER_TEXT_GAP = 12;
|
|
|
|
|
|
const FOOTER_PRICE_SIZE = 56;
|
|
|
|
|
|
- const FOOTER_STAFF_SIZE = 26;
|
|
|
-
|
|
|
/**
|
|
|
* 与 admin/home/me 一致:门店展示名、Logo 对象路径、itemRemark
|
|
|
*/
|
|
|
@@ -286,12 +287,12 @@ class PosterUtil
|
|
|
|
|
|
private static function footerTextYPositions()
|
|
|
{
|
|
|
- $staffY = self::FOOTER_STAFF_Y;
|
|
|
- $staffH = (int)ceil(self::FOOTER_STAFF_SIZE * 1.3);
|
|
|
- $priceY = $staffY + $staffH + self::FOOTER_TEXT_GAP;
|
|
|
+ $buyHintH = (int)ceil(self::FOOTER_BUY_HINT_SIZE * 1.25);
|
|
|
+ $buyHintY = self::FOOTER_BUY_HINT_Y;
|
|
|
+ $priceY = $buyHintY + $buyHintH + self::FOOTER_TEXT_GAP;
|
|
|
|
|
|
return [
|
|
|
- 'staff' => $staffY,
|
|
|
+ 'buyHint' => $buyHintY,
|
|
|
'price' => $priceY,
|
|
|
];
|
|
|
}
|
|
|
@@ -372,16 +373,6 @@ class PosterUtil
|
|
|
return self::CANVAS_PAD_Y + (int)((self::SHOP_LOGO_SIZE - self::SHOP_TITLE_SIZE) / 2);
|
|
|
}
|
|
|
|
|
|
- private static function qrCenterX()
|
|
|
- {
|
|
|
- return self::POSTER_W - self::QR_PAD_RIGHT - (int)(self::QR_SIZE / 2);
|
|
|
- }
|
|
|
-
|
|
|
- private static function scanHintYFromBottom()
|
|
|
- {
|
|
|
- return self::QR_PAD_BOTTOM + self::QR_SIZE + self::QR_HINT_GAP;
|
|
|
- }
|
|
|
-
|
|
|
public static function buildCanvasBaseUrl($prefix, $totalH)
|
|
|
{
|
|
|
$absoluteMin = self::coverStartY() + self::IMG_H_MIN + self::FOOTER_H;
|
|
|
@@ -429,17 +420,12 @@ class PosterUtil
|
|
|
$miniCode = $options['miniCode'] ?? '';
|
|
|
$priceText = $options['priceText'] ?? '';
|
|
|
$name = $options['name'] ?? '';
|
|
|
- $staffText = $options['staffText'] ?? '';
|
|
|
$mainId = (int)($options['mainId'] ?? 0);
|
|
|
$flowerNum = (int)($options['flowerNum'] ?? 0);
|
|
|
$subtitle = trim((string)($options['subtitle'] ?? ''));
|
|
|
$itemRemark = trim((string)($options['itemRemark'] ?? ''));
|
|
|
$shopTitle = trim((string)($options['shopTitle'] ?? ''));
|
|
|
$shopLogo = trim((string)($options['shopLogo'] ?? ''));
|
|
|
- $scanHint = trim((string)($options['scanHint'] ?? self::SCAN_HINT));
|
|
|
- if ($scanHint === '微信扫码采购') {
|
|
|
- $scanHint = self::SCAN_HINT;
|
|
|
- }
|
|
|
|
|
|
$coverW = (int)($options['coverWidth'] ?? 0);
|
|
|
$coverH = (int)($options['coverHeight'] ?? 0);
|
|
|
@@ -495,15 +481,13 @@ class PosterUtil
|
|
|
$url .= '/watermark,image_' . $logoB64 . ',g_se,x_210,y_48';
|
|
|
}
|
|
|
|
|
|
- $url .= '/watermark,text_' . stringUtil::ossBase64($staffText)
|
|
|
- . ',g_sw,x_' . self::CANVAS_PAD_X . ',y_' . $footerY['staff']
|
|
|
- . ',color_999999,type_' . self::FONT . ',size_' . self::FOOTER_STAFF_SIZE;
|
|
|
$url .= '/watermark,text_' . stringUtil::ossBase64($priceText)
|
|
|
. ',g_sw,x_' . self::CANVAS_PAD_X . ',y_' . $footerY['price']
|
|
|
. ',color_EE2C2C,type_' . self::FONT . ',size_' . self::FOOTER_PRICE_SIZE;
|
|
|
- $url .= '/watermark,text_' . stringUtil::ossBase64($scanHint)
|
|
|
- . ',g_south,x_' . self::qrCenterX() . ',y_' . self::scanHintYFromBottom()
|
|
|
- . ',color_888888,type_' . self::FONT . ',size_24';
|
|
|
+ $url .= '/watermark,text_' . stringUtil::ossBase64(self::FOOTER_BUY_HINT)
|
|
|
+ . ',g_sw,x_' . self::CANVAS_PAD_X . ',y_' . $footerY['buyHint']
|
|
|
+ . ',color_888888,type_' . self::FONT . ',size_' . self::FOOTER_BUY_HINT_SIZE
|
|
|
+ . ',shadow_' . self::FOOTER_BUY_HINT_SHADOW;
|
|
|
|
|
|
return $url;
|
|
|
}
|