userInfo = $userInfo; // 当前客户端 $this->channel = $channel; } /** * 拼接海报图 * @return string * @throws BaseException * @throws DataNotFoundException * @throws DbException * @throws ModelNotFoundException * @throws Exception */ public function getImage(): string { // 判断海报图文件存在则直接返回url if (file_exists($this->getPosterPath())) { return $this->getPosterUrl(); } // 商城ID $storeId = $this->userInfo['store_id']; // 商品海报背景图 $backdrop = __DIR__ . '/resource/invite_user.png'; // 小程序码参数 $scene = "refereeId:" . ($this->userInfo['user_id'] ?: ''); // 下载小程序码 $page = 'pages/login/index'; $qrcode = $this->getQrcode($storeId, $scene, $page, $this->channel); // 拼接海报图 return $this->savePoster($backdrop, $qrcode); } /** * 拼接海报图 * @param string $backdrop 背景图路径 * @param string $qrcode 二维码图路径 * @return string * @throws Exception */ private function savePoster(string $backdrop, string $qrcode): string { // 实例化图像编辑器 $editor = Grafika::createEditor(['Gd']); // 打开海报背景图 $editor->open($backdropImage, $backdrop); // 打开小程序码 $editor->open($qrcodeImage, $qrcode); // 重设小程序码宽高 $editor->resizeExact($qrcodeImage, 140, 140); // 小程序码添加到背景图 $editor->blend($backdropImage, $qrcodeImage, 'normal', 1.0, 'top-left', 520, 700); // 保存图片 $editor->save($backdropImage, $this->getPosterPath()); return $this->getPosterUrl(); } /** * 海报图文件路径 * @return string */ private function getPosterPath(): string { // 保存路径 $tempPath = web_path() . "temp/{$this->userInfo['store_id']}/"; !is_dir($tempPath) && mkdir($tempPath, 0755, true); return $tempPath . $this->getPosterName(); } /** * 海报图文件名称 * @return string */ private function getPosterName(): string { return 'invite_' . md5("{$this->userInfo['user_id']}_$this->channel") . '.png'; } /** * 海报图url * @return string */ private function getPosterUrl(): string { return base_url() . 'temp/' . $this->userInfo['store_id'] . '/' . $this->getPosterName() . '?t=' . time(); } }