PHP GD生成带邀请码二维码的海报

PHP GD生成带邀请码二维码的海报。

需求背景:给用户生成三张带邀请码和邀请链接二维码的海报。

实现方式:

  1. 前端实现
  2. 后端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];

Leave a Comment

豫ICP备19001387号-1