以前有一篇文章简单介绍了小程序生成分享海报的过程,使用canvas进行海报的生成,最近又遇到关于后端直接生成分享海报,所以简单介绍下获取微信小程序码+生成分享海报
1、获取accessToken
/**
* 获取accessToken
* @return mixed|string
*/
public function getAccessToken() {
$appId = '';
$appSecret = '';
$data = json_decode(file_get_contents("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" . $appId . "&secret=" . $appSecret), true);
return $data['access_token'] ?? '';
}
2、获取微信小程序码
/**
* 获取小程序码
* @return mixed
*/
public function getWechatCode() {
// 获取不受限制的小程序码
$url = 'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=' . $this->getAccessToken();
// 传递回传标识的参数,scene的长度限制32位
$options = [
'json' => [
'scene' => "***",
]
];
// 进行请求,得到的是图片 Buffer
$response = (new Client())->post($url, $options);
return $response->getBody()->getContents();
}
3、使用imagick生成小程序海报
/**
* 生成小程序海报
*/
public function createPoster()
{
// 海报背景底图
$bgUrl = "./poster/bg.png";
// 海报生成位置
$posterUrl = "./poster/poster.png";
// 小程序码生成位置
$wxCodeUrl = "./poster/wx-code.png";
// 初始画板
$imagick = new \Imagick();
// 设置画板宽高及导出图片格式
$imagick->newImage(1242, 2208, 'white', 'jpg');
// 塞入底图
$imagick->compositeImage(new \Imagick($bgUrl), 40, 0, 0);
// 获取个人小程序码
$content = $this->getWechatCode();
// 生成小程序码
file_put_contents($wxCodeUrl, $content);
// 缩放小程序码
$codeImagick = new \Imagick($wxCodeUrl);
// 设置尺寸
$codeImagick->thumbnailImage(200, 200);
// 设置圆角
$codeImagick->roundCornersImage(10, 10);
// 导出
$codeImagick->writeImage($wxCodeUrl);
// 创建水印对象
$draw = new \ImagickDraw();
// 设置文字大小
$draw->setFontSize(50);
// 设置文字字体,注意中文不设置的话不显示
$draw->setFont("./poster/weiruanyahei.ttf");
// 设置文字颜色
$draw->setFillColor('#2254f4');
// 设置编码
$draw->setTextEncoding('UTF-8');
// 设置水印内容
$draw->annotation(30, 200, "我是水印");
// 合并导出海报
$imagick->compositeImage(new \Imagick($wxCodeUrl), 40, 210, 400);
// 插入文字
$imagick->drawImage($draw);
$imagick->writeImage($posterUrl);
return $posterUrl;
}
通过canvas和PHP两种方式生成海报,个人感觉还是用PHP生成方便些,微信小程序中canvas开发起来感觉繁琐了一些,可能因为不是专业前端的原因,后端的话其实定制化不高,如果想要实现复杂效果的海报还得使用canvas