一个PHP图像处理的类

Posted Morven

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个PHP图像处理的类相关的知识,希望对你有一定的参考价值。

功能主要是用来给一个模板上添加相关的图片或文字元素用的,如海报的生成,证书生成之类的

<?php
namespace app\\components;

use Yii;

class Watermark

    //生成路径
   public $path;
   //水印文字
   public $watermark_string;

    /**
     * 合并图片,
     * @param $watermark_path
     * @param $background_path
     * @param null $id
     * @param int $x
     * @param int $y
     * @param string $type
     * @param string $pct
     * @return string
     */
    public function wImage($watermark_path,$background_path,$id=null,$x=1304,$y=1794,$type='png',$pct=100)
    
        if($id)
            $fileName = 'card_'.$id.'.'.$type;
        else
            $fileName = rand(100,999).time().'.'.$type;
        
        //创建图片的实例

        $dst = imagecreatefromstring(file_get_contents($background_path));//背景图片
        $src = imagecreatefromstring(file_get_contents($watermark_path));//覆盖图

        //获取覆盖图图片的宽高
        list($src_w, $src_h) = getimagesize($watermark_path);

        //将覆盖图复制到目标图片上,最后个参数100是设置透明度(100是不透明),这里实现不透明效果
        imagecopymerge($dst, $src, $x, $y, 0, 0, $src_w, $src_h, $pct);

        //header("Content-type: image/jpg");
        switch ($type)
            case 'png':
                imagepng($dst, $this->path . $fileName );//根据需要生成相应的图片
            case 'jpg':
                imagejpeg($dst, $this->path . $fileName );//根据需要生成相应的图片
        
        imagedestroy($dst);
        imagedestroy($src);
        return $fileName;//输出图片
    

    /**
     * 在图片上写入文字
     * @param $background_path 背景图
     * @param $string 写入的文字
     * @param $x x坐标
     * @param $y Y坐标
     * @param int $font 字体类型
     * @return bool
     */
    public function wText($background_path,$string,$x,$y,$font=1)
        //获取图片的属性,第一个宽度,第二个高度,类型1=>gif,2=>jpeg,3=>png
        list($width,$height,$type) = getimagesize($background_path);
        //可以处理的图片类型
        $types = array(1=>"gif",2=>"jpeg",3=>"png",);
        //通过图片类型去组合,可以创建对应图片格式的,创建图片资源的GD库函数
        $createfrom = "imagecreatefrom".$types[$type];
        //通过“变量函数”去打对应的函数去创建图片的资源
        $image = $createfrom($background_path);
        //设置居中字体的X轴坐标位置
        //$x = ($width-imagefontwidth(5)*strlen($string))/2;
        //设置居中字体的Y轴坐标位置
        //$y = ($height-imagefontheight(5))/1.18;
        //设置字体的颜色为红色
        $textcolor = imagecolorallocate($image, 0, 0, 0);
        //向图片画一个指定的字符串
//        imagestring($image, 5, $x, $y, $string, $textcolor);
        switch ($font)
            case 1:
                $font = Yii::$app->BasePath.'/font/adobeheitistd-regular.otf'; //黑体字
                break;
            case 2:
                $font = Yii::$app->BasePath.'/font/arial.ttf'; //arial字体在服务器上的绝对路径
                break;
            case 3:
                $font = Yii::$app->BasePath.'/font/arial.ttf'; //arial字体在服务器上的绝对路径
                break;
        

        imagefttext($image, 38, 0, $x, $y, $textcolor, $font, $string);
        //通过图片类型去组合保存对应格式的图片函数
        $output = "image".$types[$type];
        //通过变量函数去保存对应格式的图片
        $output($image,$background_path);
        imagedestroy($image);
        return true;
    

    /**
     * 透明PNG图合并
     * @param $watermark_path  透明的PNG图
     * @param $background_path 底图
     * @param int $x x坐标
     * @param int $y Y坐标
     * @return bool
     */
    public function toPng($watermark_path,$background_path,$x=1304,$y=1794)

        //创建源图的实例
        $src = imagecreatefromstring(file_get_contents($background_path));
        //创建点的实例
        $des = imagecreatefrompng($watermark_path);
        //获取点图片的宽高
        list($point_w, $point_h) = getimagesize($watermark_path);

        //重点:png透明用这个函数
        imagecopy($src, $des, $x, $y, 0, 0, $point_w, $point_h);

        header('Content-Type: image/png');
        imagepng($src,$background_path);
        imagedestroy($src);
        imagedestroy($des);
        return true;
    




以上是关于一个PHP图像处理的类的主要内容,如果未能解决你的问题,请参考以下文章

一个PHP图像处理的类

一个PHP图像处理的类

一个PHP图像处理的类

PHP异常处理

为啥 PHP 的空合并运算符 (??) 不能处理具有不同可见性的类常量?

OpenCV-图像色温