|
|
@@ -0,0 +1,115 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+namespace common\components;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 散客分享海报(OSS 图片水印合成)
|
|
|
+ */
|
|
|
+class PosterUtil
|
|
|
+{
|
|
|
+ const BASE_TEMPLATE = 'poster/1234.jpg';
|
|
|
+
|
|
|
+ const FONT = 'd3F5LW1pY3JvaGVp';
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 海报标题过长时截断,避免压住底部文案区
|
|
|
+ */
|
|
|
+ public static function truncateText($text, $maxLen = 14)
|
|
|
+ {
|
|
|
+ $text = trim((string)$text);
|
|
|
+ if ($text === '') {
|
|
|
+ return '';
|
|
|
+ }
|
|
|
+ if (mb_strlen($text, 'UTF-8') > $maxLen) {
|
|
|
+ return mb_substr($text, 0, $maxLen, 'UTF-8') . '…';
|
|
|
+ }
|
|
|
+ return $text;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 和炫鲜花等门店角标
|
|
|
+ */
|
|
|
+ public static function buildHyxhLogoWatermark($mainId)
|
|
|
+ {
|
|
|
+ if (!in_array((int)$mainId, [52, 1459, 13495], true)) {
|
|
|
+ return '';
|
|
|
+ }
|
|
|
+ $logo = 'poster/hyxh_ncd_logo.png?x-oss-process=image/resize,m_fill,h_72,w_72';
|
|
|
+ if ($mainId == 1459) {
|
|
|
+ $logo = 'poster/hyxh_gcd_logo.png?x-oss-process=image/resize,m_fill,h_72,w_72';
|
|
|
+ }
|
|
|
+ if ($mainId == 13495) {
|
|
|
+ $logo = 'poster/hyxh_hzd_logo.png?x-oss-process=image/resize,m_fill,h_72,w_72';
|
|
|
+ }
|
|
|
+ return stringUtil::ossBase64($logo);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 花束海报:主图 m_lfit 保留完整花束,底部价格/标题/扫码区层次更清晰
|
|
|
+ */
|
|
|
+ public static function buildMallGoodsPosterUrl($prefix, array $options)
|
|
|
+ {
|
|
|
+ $cover = $options['cover'] ?? '';
|
|
|
+ $miniCode = $options['miniCode'] ?? '';
|
|
|
+ $priceText = $options['priceText'] ?? '';
|
|
|
+ $name = $options['name'] ?? '';
|
|
|
+ $staffText = $options['staffText'] ?? '';
|
|
|
+ $mainId = (int)($options['mainId'] ?? 0);
|
|
|
+ $flowerNum = (int)($options['flowerNum'] ?? 0);
|
|
|
+
|
|
|
+ $displayName = self::truncateText($name, 14);
|
|
|
+ if ($flowerNum > 0 && $displayName !== '') {
|
|
|
+ $displayName .= ' · ' . $flowerNum . '支';
|
|
|
+ }
|
|
|
+
|
|
|
+ $coverWatermark = $cover . '?x-oss-process=image/resize,m_lfit,h_1020,w_700,limit_0';
|
|
|
+ $qrWatermark = $miniCode . '?x-oss-process=image/resize,m_fill,h_220,w_220';
|
|
|
+
|
|
|
+ $url = $prefix . self::BASE_TEMPLATE . '?x-oss-process=image';
|
|
|
+ $url .= '/watermark,image_' . stringUtil::ossBase64($coverWatermark) . ',g_north,x_25,y_8';
|
|
|
+ $url .= '/watermark,image_' . stringUtil::ossBase64($qrWatermark) . ',g_se,x_36,y_32';
|
|
|
+
|
|
|
+ $logoB64 = self::buildHyxhLogoWatermark($mainId);
|
|
|
+ if ($logoB64 !== '') {
|
|
|
+ $url .= '/watermark,image_' . $logoB64 . ',g_se,x_210,y_48';
|
|
|
+ }
|
|
|
+
|
|
|
+ $url .= '/watermark,text_' . stringUtil::ossBase64($priceText) . ',g_sw,x_24,y_32,color_EE2C2C,type_' . self::FONT . ',size_56';
|
|
|
+ $url .= '/watermark,text_' . stringUtil::ossBase64($displayName) . ',g_sw,x_24,y_102,color_333333,type_' . self::FONT . ',size_36';
|
|
|
+ $url .= '/watermark,text_' . stringUtil::ossBase64($staffText) . ',g_sw,x_24,y_148,color_999999,type_' . self::FONT . ',size_26';
|
|
|
+ $url .= '/watermark,text_' . stringUtil::ossBase64('微信扫码下单') . ',g_se,x_44,y_292,color_888888,type_' . self::FONT . ',size_24';
|
|
|
+
|
|
|
+ return $url;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 花材海报:方图裁切,保持原有布局
|
|
|
+ */
|
|
|
+ public static function buildMallItemPosterUrl($prefix, array $options)
|
|
|
+ {
|
|
|
+ $cover = $options['cover'] ?? '';
|
|
|
+ $miniCode = $options['miniCode'] ?? '';
|
|
|
+ $priceText = $options['priceText'] ?? '';
|
|
|
+ $name = $options['name'] ?? '';
|
|
|
+ $staffText = $options['staffText'] ?? '';
|
|
|
+ $mainId = (int)($options['mainId'] ?? 0);
|
|
|
+
|
|
|
+ $coverWatermark = $cover . '?x-oss-process=image/resize,m_fill,h_750,w_750';
|
|
|
+ $qrWatermark = $miniCode . '?x-oss-process=image/resize,m_fill,h_200,w_200';
|
|
|
+
|
|
|
+ $url = $prefix . self::BASE_TEMPLATE . '?x-oss-process=image';
|
|
|
+ $url .= '/watermark,image_' . stringUtil::ossBase64($coverWatermark) . ',g_nw,x_0,y_0';
|
|
|
+ $url .= '/watermark,image_' . stringUtil::ossBase64($qrWatermark) . ',g_se';
|
|
|
+
|
|
|
+ $logoB64 = self::buildHyxhLogoWatermark($mainId);
|
|
|
+ if ($logoB64 !== '') {
|
|
|
+ $url .= '/watermark,image_' . $logoB64 . ',g_se,x_65,y_65';
|
|
|
+ }
|
|
|
+
|
|
|
+ $url .= '/watermark,text_' . stringUtil::ossBase64($staffText) . ',g_sw,x_18,y_235,color_8B8989,type_' . self::FONT . ',size_30';
|
|
|
+ $url .= '/watermark,text_' . stringUtil::ossBase64(self::truncateText($name, 16)) . ',g_sw,x_18,y_145';
|
|
|
+ $url .= '/watermark,text_' . stringUtil::ossBase64($priceText) . ',g_sw,x_18,y_50,color_EE2C2C,type_' . self::FONT . ',size_50';
|
|
|
+
|
|
|
+ return $url;
|
|
|
+ }
|
|
|
+}
|