php 图片旋转添加水印

 /*
     * 生成水印logo
     * text 水印文字 bigImgPath 背景图
     */
    public static function make_watermark_img($text, $bigImgPath)
    {
        if (strtoupper(substr(PHP_OS,0,3))==='WIN')
        {
            $font = "c:/windows/fonts/SIMHEI.TTF";//字体类型,这里为黑体,
        }else{
            $font = "/usr/share/fonts/simhei.ttf";//字体类型,这里为黑体,
        }
        $text_len = strlen($text) / 3; //显示的文字
        $width = $text_len * 17; //1个字17
        $logo = 'uploads/'.$text.'.png'; //水印文字图片地址
        $size = 12; //字体大小
        $img = imagecreate($width,24);//创建一个长为x高为y的空白图片
        imagecolorallocate($img,0xff,0xff,0xff);//设置图片背景颜色,这里背景颜色为#ffffff,也就是白色
        $black=imagecolorallocate($img,0x00,0x00,0x00);//设置字体颜色,这里为#000000,也就是黑色
        imagettftext($img,$size,0,0,16, $black, $font , $text);//将ttf文字写到图片中
        $watermark_logo = imagepng($img, $logo);//输出图片,输出png使用imagepng方法,输出gif使用imagegif方法
        if (!$watermark_logo) {
            return ['status'=>false, 'msg' => '生成水印失败'];
        }
        //图片旋转
        self::flip($logo, $logo, 45);
        //添加水印
        $a = self::add_watermark($logo, $bigImgPath);
        print_r($a);die;
    }

    /*
     * 添加水印
     */
    public static function add_watermark($logo, $bigImgPath)
    {

        $im = imagecreatefromstring(file_get_contents($bigImgPath));
        //获取水印源
        $watermark = imagecreatefromstring(file_get_contents($logo));
        //获取图、水印 宽高类型
        list($bgWidth, $bgHight, $bgType) = getimagesize($bigImgPath);
        list($logoWidth, $logoHight, $logoType) = getimagesize($logo);
        //定义平铺数据
        $x_length = $bgWidth - 10; //x轴总长度
        $y_length = $bgHight - 10; //y轴总长度
        //创建透明画布 伪白色
        $opacity = 30;
        $w = imagesx($watermark);
        $h = imagesy($watermark);
        $cut = imagecreatetruecolor($w,$h);
        $white = imagecolorallocatealpha($cut, 255,255,255,0);
        imagefill( $cut, 0, 0, $white );
        //整合水印
        imagecopy($cut, $watermark, 0, 0, 0, 0, $w, $h);
        //循环平铺水印
        for ($x = 0; $x < $x_length; $x++)
        {
            for ($y = 0; $y < $y_length; $y++) {
                imagecopymerge($im, $cut, $x, $y, 0, 0, $logoWidth, $logoHight, $opacity);
                $y += $logoHight;
            }
            $x += $logoWidth;
        }
        header("Content-type:image/png");
        // imagejpeg 的第二个参数不传, 默认是显示图片
        $keys = array_merge(range(0, 9), range('a', 'z'));
        $key = '';
        for ($i = 0; $i < 15; $i++) {
            $key .= $keys[array_rand($keys)];
        }
        $fileName = $key.time().'.png';
        $file_path = 'uploads/'.$fileName;
        $img =  imagepng($im);
        print_r($img);die;
    }

    /**
     * @param $filename // 图片原始地址
     * @param $src // 旋转后图片保存地址
     * @param int $degrees // 旋转角度
     * @return bool
     */
    public static function flip($filename,$src,$degrees = 45)

    {
        //读取图片

        $data = @getimagesize($filename);

        if($data==false)return false;

        //读取旧图片

        switch ($data[2]) {
            case 1:

                $src_f = imagecreatefromgif($filename);break;

            case 2:

                $src_f = imagecreatefromjpeg($filename);break;

            case 3:

                $src_f = imagecreatefrompng($filename);break;

        }

        if($src_f=="")return false;

        $rotate = @imagerotate($src_f, $degrees,0);

        if(!imagejpeg($rotate,$src,100))return false;

        @imagedestroy($rotate);
        return true;
    }
原文地址:https://www.cnblogs.com/bkhdd/p/15623301.html