php GD库生成分享海报

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php GD库生成分享海报相关的知识,希望对你有一定的参考价值。

php生成图像,效果如图
技术分享图片
代码如下

<?php
/**
 * 图片处理
 * @author Administrator
 *
 */
class ImgGD{
    /**
     * 创建分享图片
     */
    public function createShareImg(){
        // 1 获取背景图尺寸
        list($bg_w,$bg_h) = getimagesize("../img/bg.jpg");
        // 2 创建画图
        $img = @imagecreatetruecolor($bg_w,$bg_h);
        // 3 填充画布背景颜色
        $img_bg_color = imagecolorallocate($img,255,255,255);
        imagefill($img,0,0,$img_bg_color);
        // 4 将背景图填充到画布
        $bg_img = $this->getImgReource("../img/bg.jpg");
        imagecopyresized($img,$bg_img,0,0,0,0,$bg_w,$bg_h,$bg_w,$bg_h);
        // 5 填空用户二维码
        $qrcode = $this->getImgReource("../img/qrcode.png");
        // 计算用户二维码所在x轴位置
        list($qr_w,$qr_h) = getimagesize("../img/qrcode.png");
        $qrcode_des_x = ceil(($bg_w - $qr_w)/2);
        imagecopyresized($img,$qrcode,$qrcode_des_x,513,0,0,$qr_w,$qr_h,$qr_w,$qr_h);
        // 6 填充用户信息
        $user_img_path = $this->thumbImg("../img/logo.png");
        $user_img = $this->getImgReource($user_img_path);
        list($user_w,$user_h) = getimagesize($user_img_path);

        imagecopyresized($img,$user_img,13,20,0,0,$user_w,$user_h,$user_w,$user_h);
        // 填空用户名
        $user_name = "王小明";
        $font_color = ImageColorAllocate($img,253,254,255); //字体颜色
        $font_ttf = "../ziti/HYTangMeiRenJ-2.ttf";
        imagettftext($img,23,0,90,50,$font_color,$font_ttf,$user_name);
        // 7 设置提示语
        $tip_text = "邀请你立即关注";
        imagettftext($img,17,0,90,80,$font_color,$font_ttf,$tip_text);
        // 8 输出图片
        header("Content-type: image/png");
        imagepng($img);
        // 9 释放空间
        imagedestroy($img);
        imagedestroy($bg_img);
        imagedestroy($qrcode);
        imagedestory($user_img);
    }
    /**
     * 获取图像文件资源
     * @param string $file
     * @return resource
     */
    protected function getImgReource($file){
        $file_ext = pathinfo($file,PATHINFO_EXTENSION);
        switch ($file_ext){
            case ‘jpg‘:
            case ‘jpeg‘:
                $img_reources = @imagecreatefromjpeg($file);
                break;
            case ‘png‘:
                $img_reources = @imagecreatefrompng($file);
                break;
            case ‘gif‘:
                $img_reources = @imagecreatefromgif($file);
                break;
        }
        return  $img_reources;
    }
    /**
     * 缩放图片
     * @param string $img 
     * @param string $file
     * @param number $th_w
     * @param number $th_h
     * @return boolean|string;
     */
    protected function thumbImg($img,$file=‘./‘,$th_w=62,$th_h=62){
        //给图像加大1像素的边框
        $new_th_h = $th_h + 4;
        $new_th_w = $th_w + 4;
        // 获取大图资源及图像大小
        list($max_w,$max_h) = getimagesize($img);
        if($max_w < $th_w || $max_h < $th_h) return false;
        $max_img = $this->getImgReource($img);
        //新建真色彩画布

        $min_img = @imagecreatetruecolor($new_th_w,$new_th_h);
        $bg_color = ImageColorAllocate($min_img,255,255,255);
        imagefill($min_img,0,0,$bg_color);
//         imagesavealpha($min_img,true);
        imagecolortransparent($min_img,$bg_color); 
        imagecopyresampled($min_img,$max_img,2,2,0,0,$th_w,$th_h,$max_w,$max_h);
        //输出图像到文件
        $min_img_path = $file . ‘thunm_‘.time().‘.png‘;
        imagepng($min_img,$min_img_path);
        if(!is_file($min_img_path)){
            return false;
        }
        //释放空间
        imagedestroy($max_img);
        imagedestroy($min_img);
        return $min_img_path;
    }

}
//调用
$gd_img = new ImgGD();
$gd_img->createShareImg();

使用到的函数:
使用到的GD函数:

getimagesize():该函数获取图像大小

imagecreatetruecolor() : 创建真色彩图像? ?imagecolorallocate():使用这个函数创建的图像画布图片会丢失色彩?

?imagecolorallocate() : 该函数用来设置颜色

imagecopyresized() : 拷贝图像调整图像大小

imagettftext() : 设置文本到图像上

imagepng() : 输出图像为png格式??imagejpeg() : 输出为jpg格式??imagegif() : 输出为gif格式

如果直接输出图像要添加一句代码: header("Content-type: image/png");

imagedestroy() : 该函数销毁图像释放内存空间资源

imagecreatefromjpeg() : 该函数获取jpg格式图像对应的图像资源

imagecreatefrompng() :?该函数获取png格式图像对应的图像资源

imagecreatefromgif() :?该函数获取gif格式图像对应的图像资源

具体函数的使用可以参考php手册

以上是关于php GD库生成分享海报的主要内容,如果未能解决你的问题,请参考以下文章

原生PHP 调用原生GD库 生成海报

原生PHP 调用原生GD库 生成海报

原生PHP 调用原生GD库 生成海报

PHP 使用GD库合成带二维码和圆形头像的海报步骤以及源码实现

Web前端技巧分享:教你用GD库生成验证码

利用phpqrcode二维码生成类库合成带logo的二维码并且用合成的二维码生成海报