PHP GD生成带邀请码二维码的海报。
需求背景:给用户生成三张带邀请码和邀请链接二维码的海报。
实现方式:
- 前端实现
- 后端PHP实现。
前端JavaScript方案是用Canvas
实现,但可能会涉及到跨域问题,需要由服务器端对图片进行base64
解码,数据来回传递比较耗时,且每次都要生成效率太低。
后端PHP生成则是一劳永逸,返回海报链接即可直接下载,需要GD扩展
的支持。
具体代码如下:
$invit_code = "215456";
$qrcode_path = "uploads/share/{$invit_code}.png";
$src = imagecreatefromstring(file_get_contents($qrcode_path));
$fontSize = 20;
$posters = [];
for($i = 1; $i <= 3; $i ++){
$poster_path = "uploads/share/{$uid}_poster{$i}.png";
if(! file_exists($poster_path)){
//海报背景图片
$bg_path = "assets/ex/poster{$i}.png";
//创建图片的实例
$dst = imagecreatefromstring(file_get_contents($bg_path));
// 把二维码图片的白色背景设为透明
imagecolortransparent($src, imagecolorallocate($src, 255, 255, 255));
//获取二维码图片的宽高
list($src_w, $src_h) = getimagesize($qrcode_path);
//将二维码图片复制到目标图片上
imagecopymerge($dst, $src, 212, 900, 0, 0, $src_w, $src_h, 100);
$fontColor = imagecolorallocate($dst,0,0,0);
//将邀请码文字打到海报图片上
imagettftext($dst ,$fontSize,0, 400,1285, $fontColor, 'assets/fonts/captcha.ttf', $invit_code);
//生成图片
imagepng($dst, $poster_path);
imagedestroy($dst);
}
$posters[] = "/{$poster_path}";
}
imagedestroy($src);
return ['posters' => $posters];