Poster.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  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. $size = request('size',0);
  55. if( !$thumb ) return json_send(['code'=>'error','msg'=>'请上传海报图片']);
  56. // 获取分享海报图片
  57. $result = $this->getShareImage('id='.$id,$thumb,$url,$position,$size);
  58. $this->assign('image',$result);
  59. $this->assign('crumbs','海报');
  60. // 加载模板
  61. return $this->fetch();
  62. }
  63. /**
  64. * 获取分享海报图片
  65. * @param int $scene 场景值
  66. *
  67. */
  68. private function getShareImage($scene,$thumb,$url,$position,$size){
  69. // 尝试执行
  70. try {
  71. // 加载图片
  72. $image = Image::make(public_path('uploads/').$thumb);
  73. // 生成小程序二维码
  74. $qrcode = Mini::getUnlimit($scene,['page'=>$url,'width'=>$size,'is_hyaline'=>true]);
  75. // 错误提示
  76. if( isset($qrcode['error']) ) return $qrcode;
  77. // 加载图片
  78. $qrcode = Image::make($qrcode);
  79. // 插入图片
  80. switch ($position) {
  81. case 1:
  82. $image->insert($qrcode,'top-left',0,0);
  83. break;
  84. case 2:
  85. $image->insert($qrcode,'top-center',0,0);
  86. break;
  87. case 3:
  88. $image->insert($qrcode,'top-right',0,0);
  89. break;
  90. case 4:
  91. $image->insert($qrcode,'center-left',0,0);
  92. break;
  93. case 5:
  94. $image->insert($qrcode,'center-center',0,0);
  95. break;
  96. case 6:
  97. $image->insert($qrcode,'center-right',0,0);
  98. break;
  99. case 7:
  100. $image->insert($qrcode,'bottom-left',0,0);
  101. break;
  102. case 8:
  103. $image->insert($qrcode,'bottom-center',0,0);
  104. break;
  105. case 9:
  106. $image->insert($qrcode,'bottom-right',0,0);
  107. break;
  108. }
  109. // 转码成字符串
  110. $image = $image->encode('jpg', 90)->__toString();
  111. // 转base64
  112. $base64 = 'data:image/jpg;base64,' . base64_encode($image);
  113. // 返回结果
  114. return $base64;
  115. } catch (\Throwable $th) {
  116. // 错误提示
  117. return ['error'=>$th->getMessage()];
  118. }
  119. }
  120. }