PosterUtil.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <?php
  2. namespace common\components;
  3. /**
  4. * 散客分享海报(OSS 图片水印合成)
  5. */
  6. class PosterUtil
  7. {
  8. const BASE_TEMPLATE = 'poster/1234.jpg';
  9. const FONT = 'd3F5LW1pY3JvaGVp';
  10. /**
  11. * 海报标题过长时截断,避免压住底部文案区
  12. */
  13. public static function truncateText($text, $maxLen = 14)
  14. {
  15. $text = trim((string)$text);
  16. if ($text === '') {
  17. return '';
  18. }
  19. if (mb_strlen($text, 'UTF-8') > $maxLen) {
  20. return mb_substr($text, 0, $maxLen, 'UTF-8') . '…';
  21. }
  22. return $text;
  23. }
  24. /**
  25. * 和炫鲜花等门店角标
  26. */
  27. public static function buildHyxhLogoWatermark($mainId)
  28. {
  29. if (!in_array((int)$mainId, [52, 1459, 13495], true)) {
  30. return '';
  31. }
  32. $logo = 'poster/hyxh_ncd_logo.png?x-oss-process=image/resize,m_fill,h_72,w_72';
  33. if ($mainId == 1459) {
  34. $logo = 'poster/hyxh_gcd_logo.png?x-oss-process=image/resize,m_fill,h_72,w_72';
  35. }
  36. if ($mainId == 13495) {
  37. $logo = 'poster/hyxh_hzd_logo.png?x-oss-process=image/resize,m_fill,h_72,w_72';
  38. }
  39. return stringUtil::ossBase64($logo);
  40. }
  41. /**
  42. * 花束海报
  43. */
  44. public static function buildMallGoodsPosterUrl($prefix, array $options)
  45. {
  46. return self::buildMallSharePosterUrl($prefix, $options);
  47. }
  48. /**
  49. * 花材海报(与花束同一套版式)
  50. */
  51. public static function buildMallItemPosterUrl($prefix, array $options)
  52. {
  53. return self::buildMallSharePosterUrl($prefix, $options);
  54. }
  55. /**
  56. * 花农端花店采购海报(ghs 花材详情太阳码)
  57. */
  58. public static function buildGhsHdItemPosterUrl($prefix, array $options)
  59. {
  60. if (!isset($options['scanHint'])) {
  61. $options['scanHint'] = '微信扫码采购';
  62. }
  63. return self::buildMallSharePosterUrl($prefix, $options);
  64. }
  65. /**
  66. * 散客分享海报:主图 m_lfit、价格/标题/推荐人层次、扫码提示
  67. */
  68. private static function buildMallSharePosterUrl($prefix, array $options)
  69. {
  70. $cover = $options['cover'] ?? '';
  71. $miniCode = $options['miniCode'] ?? '';
  72. $priceText = $options['priceText'] ?? '';
  73. $name = $options['name'] ?? '';
  74. $staffText = $options['staffText'] ?? '';
  75. $mainId = (int)($options['mainId'] ?? 0);
  76. $flowerNum = (int)($options['flowerNum'] ?? 0);
  77. $subtitle = trim((string)($options['subtitle'] ?? ''));
  78. $scanHint = trim((string)($options['scanHint'] ?? '微信扫码下单'));
  79. $displayName = self::truncateText($name, 14);
  80. if ($flowerNum > 0 && $displayName !== '') {
  81. $displayName .= ' · ' . $flowerNum . '支';
  82. } elseif ($subtitle !== '' && $displayName !== '') {
  83. $displayName .= ' · ' . self::truncateText($subtitle, 8);
  84. }
  85. $coverWatermark = $cover . '?x-oss-process=image/resize,m_lfit,h_1020,w_700,limit_0';
  86. $qrWatermark = $miniCode . '?x-oss-process=image/resize,m_fill,h_220,w_220';
  87. $url = $prefix . self::BASE_TEMPLATE . '?x-oss-process=image';
  88. $url .= '/watermark,image_' . stringUtil::ossBase64($coverWatermark) . ',g_north,x_25,y_8';
  89. $url .= '/watermark,image_' . stringUtil::ossBase64($qrWatermark) . ',g_se,x_36,y_32';
  90. $logoB64 = self::buildHyxhLogoWatermark($mainId);
  91. if ($logoB64 !== '') {
  92. $url .= '/watermark,image_' . $logoB64 . ',g_se,x_210,y_48';
  93. }
  94. $url .= '/watermark,text_' . stringUtil::ossBase64($priceText) . ',g_sw,x_24,y_32,color_EE2C2C,type_' . self::FONT . ',size_56';
  95. $url .= '/watermark,text_' . stringUtil::ossBase64($displayName) . ',g_sw,x_24,y_102,color_333333,type_' . self::FONT . ',size_36';
  96. $url .= '/watermark,text_' . stringUtil::ossBase64($staffText) . ',g_sw,x_24,y_148,color_999999,type_' . self::FONT . ',size_26';
  97. $url .= '/watermark,text_' . stringUtil::ossBase64($scanHint) . ',g_se,x_44,y_292,color_888888,type_' . self::FONT . ',size_24';
  98. return $url;
  99. }
  100. }