美文网首页
php文字水印 图片水印 圆形微信头像水印

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

作者: 北国四月天 | 来源:发表于2018-07-07 15:26 被阅读0次

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

    二.看代码

        //准备绘图元素

        $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文字水印 图片水印 圆形微信头像水印

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