Poster.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. <?php namespace App\Http\Controllers\Admin;
  2. use App\Facades\Servers\WechatMini\Mini;
  3. use App\Models\City;
  4. use App\Models\WeiBan\Tags as WeiBanTags;
  5. use Illuminate\Support\Facades\DB;
  6. use Intervention\Image\Facades\Image;
  7. /**
  8. * 拉新活动
  9. *
  10. * @author 刘相欣
  11. *
  12. */
  13. class Poster extends Auth{
  14. protected function _initialize(){
  15. parent::_initialize();
  16. $this->assign('breadcrumb1','海报');
  17. $this->assign('breadcrumb2','生成海报');
  18. }
  19. /**
  20. * 列表页
  21. *
  22. * */
  23. public function index(){
  24. // 加载模板
  25. return $this->fetch();
  26. }
  27. /**
  28. * 获取小程序链接
  29. *
  30. */
  31. private function getUrlLink($id){
  32. // 结果数据
  33. $link = cache('admin:recruitment:active:urllink:'.$id);
  34. // 不存在数据
  35. if ( is_null($link) ) {
  36. // 从数据库获取数据
  37. $link = Mini::getUrlLink('pages/recruitment/index','id='.$id);
  38. // 存起来
  39. cache(['admin:recruitment:active:urllink:'.$id=>$link],$link ? now()->addDays(28) : now()->addMinutes(3));
  40. }
  41. // 返回结果
  42. return $link;
  43. }
  44. /**
  45. * 获取小程序海报
  46. *
  47. */
  48. public function get_poster(){
  49. // 接收参数
  50. $id = request('id',0);
  51. $url = request('url',0);
  52. $position = request('position',0);
  53. $thumb = request('thumb',0);
  54. if( !$thumb ) return json_send(['code'=>'error','msg'=>'请上传海报图片']);
  55. // 获取分享海报图片
  56. $result = $this->getShareImage('id='.$id,$thumb,$url,$position);
  57. $this->assign('image',$result);
  58. $this->assign('crumbs','海报');
  59. // 加载模板
  60. return $this->fetch();
  61. }
  62. /**
  63. * 获取分享海报图片
  64. * @param int $scene 场景值
  65. *
  66. */
  67. private function getShareImage($scene,$thumb,$url,$position){
  68. // 尝试执行
  69. try {
  70. // 加载图片
  71. $image = Image::make(public_path('uploads/').$thumb);
  72. // 生成小程序二维码
  73. $qrcode = Mini::getUnlimit($scene,['page'=>$url,'width'=>480,'is_hyaline'=>true]);
  74. // 错误提示
  75. if( isset($qrcode['error']) ) return $qrcode;
  76. // 加载图片
  77. $qrcode = Image::make($qrcode);
  78. // 插入图片
  79. switch ($position) {
  80. case 1:
  81. $image->insert($qrcode,'top-left',0,0);
  82. break;
  83. case 2:
  84. $image->insert($qrcode,'top-center',0,0);
  85. break;
  86. case 3:
  87. $image->insert($qrcode,'top-right',0,0);
  88. break;
  89. case 4:
  90. $image->insert($qrcode,'center-left',0,0);
  91. break;
  92. case 5:
  93. $image->insert($qrcode,'center-center',0,0);
  94. break;
  95. case 6:
  96. $image->insert($qrcode,'center-right',0,0);
  97. break;
  98. case 7:
  99. $image->insert($qrcode,'bottom-left',0,0);
  100. break;
  101. case 8:
  102. $image->insert($qrcode,'bottom-center',0,0);
  103. break;
  104. case 9:
  105. $image->insert($qrcode,'bottom-right',0,0);
  106. break;
  107. }
  108. // 转码成字符串
  109. $image = $image->encode('jpg', 90)->__toString();
  110. // 转base64
  111. $base64 = 'data:image/jpg;base64,' . base64_encode($image);
  112. // 返回结果
  113. return $base64;
  114. } catch (\Throwable $th) {
  115. // 错误提示
  116. return ['error'=>$th->getMessage()];
  117. }
  118. }
  119. }