美文网首页PHP微信小程序程序猿的进阶屋
小程序绘制海报不支持特殊字体怎么办?用php!

小程序绘制海报不支持特殊字体怎么办?用php!

作者: 王中阳 | 来源:发表于2019-01-30 12:03 被阅读3次
    想必这张图片在友圈肯定有看到过,还是小火了一段时间,快过年了嘛,都开始了各种推广活动。

    看到这张图,首先被签名字体吸引了,产品设计还是很严谨滴,但是小程序canvas不支持特殊字体,这可咋搞,调研一圈之后,发现php的DG库很好用(上图就是php绘制的),那就交给万能的php喽。

    废话不多说,上代码:

      //主方法
     function createSharePng($gData)
        {
            $im = imageCreateFromJPEG($gData['origin_pic']); //把传入的背景图作为画布 也支持绘制画布
    
            //字体文件
            $font_file = "/data/www/activity_pic/qianming.TTF";
    
            //设定字体的颜色
            $font_color = ImageColorAllocate($im, 28, 28, 28);
    
            //二维码
            $logoImg = @imagecreatefrompng('/data/www/activity_pic/luxuryCar/luxurycar_qrcode.png');
            $qrcodeLength = 75;
            imagecopyresized($im, $logoImg, 350, 590, 0, 0, $qrcodeLength, $qrcodeLength, $qrcodeLength, $qrcodeLength);
    
            //姓名
            $name = $gData['name'];
            imagettftext($im, 14, -4, 120, 420, $font_color, $font_file, $name);
            //乙方
            $name = $gData['name'];
            imagettftext($im, 18, -2, 300, 790, $font_color, $font_file, $name);
            //交车时间
            $cartime = $gData['cartime'];
            imagettftext($im, 14, -4, 160, 630, $font_color, $font_file, $cartime);
            $signtime = $gData['signtime'];
            imagettftext($im, 14, -2, 320, 830, $font_color, $font_file, $signtime);
    
            //输出图片
            Header("Content-Type: image/png");
            imagepng($im);
        }
    
        /**
         * 从图片文件创建Image资源
         * @param $file 图片文件,支持url
         * @return bool|resource    成功返回图片image资源,失败返回false
         */
        function createImageFromFile($file)
        {
            if (preg_match('/http(s)?:\/\//', $file)) {
                $fileSuffix = self::getNetworkImgType($file);
            } else {
                $fileSuffix = pathinfo($file, PATHINFO_EXTENSION);
            }
    
            if (!$fileSuffix) return false;
    
            switch ($fileSuffix) {
                case 'jpeg':
                    $theImage = @imagecreatefromjpeg($file);
                    break;
                case 'jpg':
                    $theImage = @imagecreatefromjpeg($file);
                    break;
                case 'png':
                    $theImage = @imagecreatefrompng($file);
                    break;
                case 'gif':
                    $theImage = @imagecreatefromgif($file);
                    break;
                default:
                    $theImage = @imagecreatefromstring(file_get_contents($file));
                    break;
            }
    
            return $theImage;
        }
    
        /**
         * 获取网络图片类型
         * @param $url  网络图片url,支持不带后缀名url
         * @return bool
         */
        function getNetworkImgType($url)
        {
            $ch = curl_init(); //初始化curl
            curl_setopt($ch, CURLOPT_URL, $url); //设置需要获取的URL
            curl_setopt($ch, CURLOPT_NOBODY, 1);
            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);//设置超时
            curl_setopt($ch, CURLOPT_TIMEOUT, 3);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //支持https
            curl_exec($ch);//执行curl会话
            $http_code = curl_getinfo($ch);//获取curl连接资源句柄信息
            curl_close($ch);//关闭资源连接
    
            if ($http_code['http_code'] == 200) {
                $theImgType = explode('/', $http_code['content_type']);
    
                if ($theImgType[0] == 'image') {
                    return $theImgType[1];
                } else {
                    return false;
                }
            } else {
                return false;
            }
        }
    

    备注:

    1. 为了读者阅读方便,示例代码去掉了为空及规则校验,安全性考虑数据校验是必要的
    2. GD库链接

    相关文章

      网友评论

        本文标题:小程序绘制海报不支持特殊字体怎么办?用php!

        本文链接:https://www.haomeiwen.com/subject/uniqsqtx.html