php文字水印 图片水印 圆形微信头像水印

一. 看效果(需求是将用户的微信头像变成水印打在背景图上)

php文字水印 图片水印 圆形微信头像水印_第1张图片

二.看代码

    //准备绘图元素

    $location= array();                                         //坐标   可写在配置文件里

    $headImg  = $userInfo['headimgurl'];           //头像

    $time= date("Y/m/d",time());                          //日期

    //相关证书背景图存在,则以为背景,重新合成图(打上头像、日期)

    $BG_URL= '/bg.jpg';

    $imageUrl= $this->createImg ($BG_URL, $headImg, $time,$FONT, $location);


    private function createImg($source, $text1, $text2, $font ,$L) {

        $file_root = '/tmp/';

        $file_name =  md5 ( $source . $text1 . $text2) . '.jpg';

        if(!file_exists ($source ) or !file_exists ($font ) ){

            die("资源不存在!");

        }

        if(@!file_get_contents($file_root.$file_name)){

            $main  = imagecreatefromjpeg ( $source );

            $w  = imagesx ( $main );

            $h = imagesy ( $main );

            $target = imagecreatetruecolor ( $width, $height );

            $white  = imagecolorallocate ( $target, 255, 255, 255 );

            imagefill ( $target, 0, 0, $white );

            imagecopyresampled ( $target, $main, 0, 0, 0, 0, $w, $h, $w, $h );

            $fontColor = imagecolorallocate ( $target, 22,172,169 );   //字的RGB颜色

            //打上文字

            imagettftext ( $target, n,n,n,n, $fontColor, $font, $text2 ); 

            //获取头像图(将图像存在本地)

            $head_file  =  'tx'.md5 ($text1) . '.jpg';

            $localPath  =  $file_root.$head_file;

            //如文件不存在,将远程文件下载到本地

            if (!file_exists($localPath)) {

                $image  = $this->getImage($text1);            //获取远程文件,用curl请求

                file_put_contents($localPath,$image);

            }

            $localPath  = $this->circular($localPath,$file_root);   //将头像处理成圆形

            $localPath  = imagecreatefromstring(file_get_contents($localPath));

             //打印水印

            imagecopy ( $target, $localPath,n,n,n,n,n,n);  

            imagejpeg ( $target, $file_root.$file_name, 95 );     // 输出合成的新图象到文件

            imagedestroy ( $main );

            imagedestroy ( $target );

        }

        //同步图片到专门存储图片的服务器(这个具体看公司业务)

        $file_path =$this->synchronou($file_root.$file_name); 

        $data = json_decode($file_path,true);

        if ($data['ret_code']==1) {

            return  "www.xxx.com/".$data['filename'];

        }

    }

   //下载远程图片

    private function getImage($url ){

        $ch = curl_init();

        curl_setopt($ch, CURLOPT_URL, $url);

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

        curl_setopt($ch, CURLOPT_ENCODING, ""); 

        curl_setopt($ch, CURLOPT_HEADER, 0);

        $output = curl_exec($ch);

        curl_close($ch);

        return $output;

    }

三.小结

          主要用到的是GD库知识,不清楚的地方可去看官方手册,注意函数参数。

          获取远程图片资源使用curl,比如获取微信头像存到本地curl不到1秒时间,

    使用file_get_contents()竟然要花费18秒。

你可能感兴趣的:(php文字水印 图片水印 圆形微信头像水印)