Poster.php 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 山西牛酷信息科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com.cn
  8. * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用。
  9. * 任何企业和个人不允许对程序代码以任何形式任何目的再发布。
  10. * =========================================================
  11. */
  12. namespace app\model\system;
  13. use app\model\BaseModel;
  14. use extend\Poster as PosterExtend;
  15. /**
  16. * 海报生成类
  17. */
  18. class Poster extends BaseModel
  19. {
  20. /**
  21. * 商品海报
  22. */
  23. public function goods($app_type, $page, $qrcode_param, $promotion_type = 'null'){
  24. try {
  25. $goods_info = $this->getGoodsInfo($qrcode_param['sku_id']);
  26. if (empty($goods_info)) return $this->error('未获取到商品信息');
  27. $qrcode_info = $this->getGoodsQrcode($app_type, $page, $qrcode_param, $promotion_type);
  28. if ($qrcode_info['code'] < 0) return $qrcode_info;
  29. if (!empty($qrcode_param['source_member'])) {
  30. $member_info = $this->getMemberInfo($qrcode_param['source_member']);
  31. }
  32. $poster_width = 740;
  33. $poster_height = !empty($member_info) ? 1120 : 1000;
  34. $poster = new PosterExtend($poster_width, $poster_height);
  35. $option = [
  36. [
  37. 'action' => 'setBackground', // 设背景色
  38. 'data' => [255, 255, 255]
  39. ],
  40. [
  41. 'action' => 'imageCopy', // 写入商品图
  42. 'data' => [
  43. $goods_info['sku_image'],
  44. 20,
  45. 20,
  46. 700,
  47. 700
  48. ]
  49. ],
  50. [
  51. 'action' => 'imageText', // 写入商品名称
  52. 'data' => [
  53. $goods_info['sku_name'],
  54. 22,
  55. [0, 0, 0],
  56. 20,
  57. !empty($member_info) ? 895 : 775,
  58. 490,
  59. 2,
  60. true
  61. ]
  62. ],
  63. [
  64. 'action' => 'imageCopy', // 写入商品二维码
  65. 'data' => [
  66. $qrcode_info['data']['path'],
  67. 510,
  68. !empty($member_info) ? 860 : 740,
  69. 210,
  70. 210
  71. ]
  72. ],
  73. [
  74. 'action' => 'imageText', // 写入提示
  75. 'data' => [
  76. '长按扫码购买',
  77. 16,
  78. [102, 102, 102],
  79. 555,
  80. !empty($member_info) ? 1100 : 980,
  81. 490,
  82. 1
  83. ]
  84. ],
  85. [
  86. 'action' => 'imageText', // 写入商品推广语
  87. 'data' => [
  88. $goods_info['introduction'],
  89. 18,
  90. [102, 102, 102],
  91. 20,
  92. !empty($member_info) ? 975 : 855,
  93. 490,
  94. 1
  95. ]
  96. ],
  97. [
  98. 'action' => 'imageText', // 写入商品价格
  99. 'data' => [
  100. '¥' . $goods_info['discount_price'],
  101. 30,
  102. [255, 0, 0],
  103. 20,
  104. !empty($member_info) ? 1065 : 945,
  105. 490,
  106. 2,
  107. true
  108. ]
  109. ],
  110. ];
  111. if (!empty($member_info)) {
  112. $member_option = [
  113. [
  114. 'action' => 'imageCircularCopy', // 写入用户头像
  115. 'data' => [
  116. !empty($member_info['headimg']) ? $member_info['headimg']: 'upload/uniapp/default_headimg.png',
  117. 20,
  118. 740,
  119. 100,
  120. 100
  121. ]
  122. ],
  123. [
  124. 'action' => 'imageText', // 写入分享人昵称
  125. 'data' => [
  126. $member_info['nickname'],
  127. 22,
  128. [10, 10, 10],
  129. 140,
  130. 790,
  131. 580,
  132. 1
  133. ]
  134. ],
  135. [
  136. 'action' => 'imageText', // 写入分享人昵称
  137. 'data' => [
  138. '分享给你一个商品',
  139. 18,
  140. [102, 102, 102],
  141. 140,
  142. 825,
  143. 580,
  144. 1
  145. ]
  146. ]
  147. ];
  148. $option = array_merge($option, $member_option);
  149. }
  150. $option_res = $poster->create($option);
  151. if (is_array($option_res)) return $option_res;
  152. $res = $option_res->jpeg('upload/poster/goods', 'goods_' . $promotion_type . '_' . $qrcode_param['sku_id'] . '_' . $qrcode_param['source_member'] . '_' . $app_type);
  153. return $res;
  154. } catch (\Exception $e) {
  155. return $this->error($e->getMessage().$e->getFile().$e->getLine());
  156. }
  157. }
  158. /**
  159. * 获取用户信息
  160. * @param unknown $member_id
  161. */
  162. private function getMemberInfo($member_id){
  163. $info = model('member')->getInfo(['member_id' => $member_id], 'nickname,headimg');
  164. return $info;
  165. }
  166. /**
  167. * 获取商品信息
  168. * @param unknown $sku_id
  169. */
  170. private function getGoodsInfo($sku_id){
  171. $info = model('goods_sku')->getInfo(['sku_id' => $sku_id], 'sku_name,introduction,price,discount_price,sku_image,collect_num');
  172. return $info;
  173. }
  174. /**
  175. * 获取商品二维码
  176. * @param unknown $app_type 请求类型
  177. * @param unknown $page uniapp页面路径
  178. * @param unknown $qrcode_param 二维码携带参数
  179. * @param string $promotion_type 活动类型 null为无活动
  180. */
  181. private function getGoodsQrcode($app_type, $page, $qrcode_param, $promotion_type = 'null'){
  182. $res = event('Qrcode', [
  183. 'app_type' => $app_type,
  184. 'type' => 'get',
  185. 'data' => $qrcode_param,
  186. 'page' => $page,
  187. 'qrcode_path' => 'upload/qrcode/goods',
  188. 'qrcode_name' => 'goods_' . $promotion_type . '_' . $qrcode_param['sku_id'] . '_' . $qrcode_param['source_member'],
  189. ], true);
  190. return $res;
  191. }
  192. }