You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

145 lines
5.7 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
namespace app\distribution\service;
use app\distribution\model\DistributionUserCode;
use think\facade\Request;
class Poster extends Base
{
/**
* 生成分销二维码 H5页面
* @date 2022-03-01
*/
public function getH5DistributionCode($user_id = '')
{
if (!$user_id) {
// 默认为请求人的用户ID
$user_id = $this->userId;
}
$oss_param = get_ali_oss_config();
$user_code_model = new DistributionUserCode();
$oss_class = new \ali\oss\Oss($oss_param);
// 获取用户分销二维码 H5页面
$user_h5_code = $user_code_model->getOneData([
['uid', '=', $this->mid],
['user_id', '=', $user_id]
], 'h5_code');
// 如果存在则直接返回
if (!empty($user_h5_code)) {
return sendSuccessArray([
'h5_code' => $user_h5_code
]);
}
// 扫码进入的H5页面
$url = Request::domain() . '/h5/#/pages/user/register/trade?user_id=' . $user_id;
// 生成用户分销二维码 H5页面
$local_code_url = create_qr_code_to_server($url, './temp/uid' . $this->mid . '/distribution_code_h5', 'h5_' . $user_id . '.jpg');
// 本地文件上传至oss
$oss_file_dirname = 'uid' . $this->mid . '/distribution_code';
$oss_file_name = 'h5_' . $user_id . '.jpg';
$result = $oss_class->uploadFile($local_code_url, $oss_file_dirname, $oss_file_name);
// 存储到分销二维码表
$data = [
'uid' => $this->mid,
'user_id' => $user_id,
'h5_code' => $result['url']
];
$res = $user_code_model->updateCode($data);
if (!$res) {
return sendErrorArray(2001, '更新二维码失败');
}
return sendSuccessArray([
'h5_code' => $result['url']
]);
}
/**
* 生成海报
* @param string $bg_img 背景图
* @param string $project_name 项目名称
* @param string $user_code 用户二维码
* @param array $info 用户信息
* @param string $info ['head_img'] 用户头像
* @param string $info ['nick_name'] 用户昵称
* @date 2022-08-26
*/
public function createPoster($bg_img, $project_name, $user_code, $info)
{
$oss_param = get_ali_oss_config();
$handle_class = new \ali\oss\image\Handle($oss_param);
$oss_class = new \ali\oss\Oss($oss_param);
/* 如果是微信官方的链接头像需要下载到服务器并保存到OSS
需要线上SSL 环境
https://thirdwx.qlogo.cn为微信官方头像的域名
https://tfs.alipayobjects.com为微信官方头像的域名 */
if (strstr($info['head_img'], 'thirdwx.qlogo.cn') !== false
|| strstr($info['head_img'], 'tfs.alipayobjects.com') !== false) {
// 本地存储路径
$local_file_path = file_save_to_server($info['head_img'], './temp', 'user_' . $this->userId . '.jpg');
// 本地文件上传至oss
$oss_file_dirname = 'uid2/user_head_img';
$oss_file_name = 'user_' . $this->userId . '.jpg';
$result = $oss_class->uploadFile($local_file_path, $oss_file_dirname, $oss_file_name);
// OSS用户头像
$info['head_img'] = $result['url'];
}
// 小程序名称
$project_name_text = base64url_encode($project_name);
// 简介
$brief_text = base64url_encode('扫一扫二维码,加入我的团队');
// 获取用户头像OSS的object
$user_head_image_object_arr = explode('juchenghb1.oss-cn-qingdao.aliyuncs.com/', $info['head_img']);
/* 用户头像水印
缩放将原图等比缩放为延伸出指定w与h的矩形框外的最小图片然后将超出的部分进行居中裁剪 宽50 高50
内切圆半径25
格式转换png格式 */
$user_head_image = base64url_encode(end($user_head_image_object_arr) . '?x-oss-process=image/resize,m_fill,w_50,h_50/circle,r_25/format,png');
// 简介
$user_nick_name_text = base64url_encode($info['nick_name']);
/* 二维码水印
缩放将原图缩放为指定w与h的矩形内的最大图片然后使用指定颜色居中填充空白部分 宽180 高180 */
$user_code_arr = explode('juchenghb1.oss-cn-qingdao.aliyuncs.com/', $user_code);
$user_code_image = base64url_encode(end($user_code_arr) . '?x-oss-process=image/resize,m_pad,w_180,h_180');
/* 缩放将原图等比缩放为延伸出指定w与h的矩形框外的最小图片然后将超出的部分进行居中裁剪 宽700 高1000
添加文字水印(小程序名称):$project_name_text 据左上 x=57 y=775 颜色1A1A1A 字体大小40
添加文字水印(简介):$brief_text 据左上 x=57 y=831 颜色4D4D4D 字体大小26
添加图片水印(用户头像):$user_head_image 据左上 x=57 y=891
添加文字水印(用户昵称):$user_head_image 据左上 x=116 y=898 颜色666666 字体大小26
添加图片水印(二维码):$user_code_image 据左上 x=471 y=772 */
$style = "resize,m_fill,w_700,h_1000"
. "/watermark,g_nw,x_57,y_775,text_$project_name_text,color_1A1A1A,size_40"
. "/watermark,g_nw,x_57,y_831,text_$brief_text,color_4D4D4D,size_26"
. "/watermark,g_nw,x_57,y_891,image_" . $user_head_image
. "/watermark,g_nw,x_116,y_898,text_$user_nick_name_text,color_666666,size_26"
. "/watermark,g_nw,x_471,y_772,image_" . $user_code_image;
// 合成的图片路径
$result = $handle_class->handleImage($bg_img, $style);
return $result;
}
}