生成海报

<?php

   /**

    * 生成宣传海报

    * @param  url      二维码链接

    * @param  array    参数,包括图片和文字

    * @param  string   $filename 生成海报文件名,不传此参数则不生成文件,直接输出图片

    * @return [type] [description]

    */

   function createPoster($url,$config=array(),$filename=""){

       header("Content-type: text/html; charset=utf-8");

       //如果要看报什么错,可以先注释调这个header

       if(empty($filename)){

           header("content-type: image/png");

       }

       $headeDefault = array(

           'left'=>0,

           'top'=>0,

           'right'=>0,

           'bottom'=>0,

           'width'=>100,

           'height'=>100,

           'opacity'=>100

       );

       $textDefault =  array(

           'text'=>'',

           'left'=>0,

           'top'=>0,

           'fontSize'=>32,            

           'fontColor'=>'255,255,255',

           'angle'=>0,

       );

       $imageDefault = array(

           'left'=>0,

           'top'=>0,

           'right'=>0,

           'bottom'=>0,

           'width'=>100,

           'height'=>100,

           'opacity'=>100

       );

       $background = $config['background'];//海报最底层得背景  

       //背景方法

       $backgroundInfo = getimagesize($background);

       //print_r($backgroundInfo);exit;

       $backgroundFun = 'imagecreatefrom'.image_type_to_extension($backgroundInfo[2], false);

       $background = $backgroundFun($background);

   

       $backgroundWidth = imagesx($background);    //背景宽度

       $backgroundHeight = imagesy($background);   //背景高度

   

       $imageRes = imageCreatetruecolor($backgroundWidth,$backgroundHeight);

       $color = imagecolorallocate($imageRes, 0, 0, 0);  

       imagefill($imageRes, 0, 0, $color);  

       // imageColorTransparent($imageRes, $color);    //颜色透明

       imagecopyresampled($imageRes,$background,0,0,0,0,imagesx($background),imagesy($background),imagesx($background),imagesy($background));  

       

       //处理文字

       if(!empty($config['text'])){

           foreach ($config['text'] as $key => $val) {

               $val = array_merge($textDefault,$val);

               list($R,$G,$B) = explode(',', $val['fontColor']);

               $fontColor = imagecolorallocate($imageRes, $R, $G, $B);

               $val['left'] = $val['left']<0?$backgroundWidth- abs($val['left']):$val['left'];

               $val['top'] = $val['top']<0?$backgroundHeight- abs($val['top']):$val['top'];

               imagettftext($imageRes,$val['fontSize'],$val['angle'],$val['left'],$val['top'],$fontColor,$val['fontPath'],$val['text']); 

           }

       }    

       //处理了二维码及头像图片

       if(!empty($config['image'])){

           $arrayimg=$config['image'];

           foreach ($arrayimg as $key => $val) {

               $val = array_merge($imageDefault,$val);

               $info = getimagesize($val['url']);

               $function = 'imagecreatefrom'.image_type_to_extension($info[2], false);

               if($val['stream']){     //如果传的是字符串图像流

                   $info = getimagesizefromstring($val['url']);

                   $function = 'imagecreatefromstring';

               }

               $res = $function($val['url']);

               $resWidth = $info[0];

               $resHeight = $info[1];

               //建立画板 ,缩放图片至指定尺寸

               $canvas=imagecreatetruecolor($val['width'], $val['height']);

               imagefill($canvas, 0, 0, $color);

               //关键函数,参数(目标资源,源,目标资源的开始坐标x,y, 源资源的开始坐标x,y,目标资源的宽高w,h,源资源的宽高w,h)

               imagecopyresampled($canvas, $res, 0, 0, 0, 0, $val['width'], $val['height'],$resWidth,$resHeight);

               $val['left'] = $val['left']<0?$backgroundWidth- abs($val['left']) - $val['width']:$val['left'];

               $val['top'] = $val['top']<0?$backgroundHeight- abs($val['top']) - $val['height']:$val['top'];

               //放置图像

               imagecopymerge($imageRes,$canvas, $val['left'],$val['top'],$val['right'],$val['bottom'],$val['width'],$val['height'],$val['opacity']);//左,上,右,下,宽度,高度,透明度

           }

       }if(!empty($config['head'])){

           $arrayimg=$config['head'];

           foreach ($arrayimg as $key => $val) {

               $val = array_merge($imageDefault,$val);

               $info = getimagesize($val['url']);

               $function = 'imagecreatefrom'.image_type_to_extension($info[2], false);

               if($val['stream']){     //如果传的是字符串图像流

                   $info = getimagesizefromstring($val['url']);

                   $function = 'imagecreatefromstring';

               }

               $res = $function($val['url']);

               $resWidth = $info[0];

               $resHeight = $info[1];

               //建立画板 ,缩放图片至指定尺寸

               $canvas=imagecreatetruecolor($val['width'], $val['height']);

               imagefill($canvas, 0, 0, $color);

               //关键函数,参数(目标资源,源,目标资源的开始坐标x,y, 源资源的开始坐标x,y,目标资源的宽高w,h,源资源的宽高w,h)

               imagecopyresampled($canvas, $res, 0, 0, 0, 0, $val['width'], $val['height'],$resWidth,$resHeight);

               $val['left'] = $val['left']<0?$backgroundWidth- abs($val['left']) - $val['width']:$val['left'];

               $val['top'] = $val['top']<0?$backgroundHeight- abs($val['top']) - $val['height']:$val['top'];

               //放置图像

               imagecopymerge($imageRes,$canvas, $val['left'],$val['top'],$val['right'],$val['bottom'],$val['width'],$val['height'],$val['opacity']);//左,上,右,下,宽度,高度,透明度

           }

       }

       //生成图片  

       if(!empty($filename)){

           $res = imagejpeg ($imageRes,$filename,90); //保存到本地

           imagedestroy($imageRes);

           if(!$res){

               return false;

           }

           return $filename;

       }else{

           imagejpeg ($imageRes);          //在浏览器上显示

           imagedestroy($imageRes);

       }  

   }

   /**

    * @Author   JunjunChen

    * @DateTime 2018-11-05T10:50:28+0800

    * @method 生成图片

    * @param

    * @version  [version]

    * @return   [type]                   [description]

    */

   function makeimg(){

       header("Content-type: text/html; charset=utf-8");

       $url='https://quan.alonesky.com';

       include "phpqrcode/phpqrcode.php";

       //$url = urldecode($url);

       $qrcode = './qrcode/qrcode_'.time().'.jpg';// 生成的文件名

       if(!file_exists($qrcode)){

           $object = new QRcode();

           $object->png($url,$qrcode,'L','4');

       }

       $config = array(

           'text'=>array(

               array(

                 'text'=>'贪恋朝夕',                   //显示字体

                 'left'=>110,                          //距离左侧

                 'top'=>170,                           //距离顶部

                 'fontPath'=>'images/simhei.ttf',      //字体文件

                 'fontSize'=>18,                       //字号

                 'fontColor'=>'255,0,0',               //字体颜色

                 'angle'=>0,                           //字体角度

               )

           ),

           'head'=>array(

               array(

                 'url'=>'./images/head.jpg',

                 'left'=>120,

                 'top'=>70,

                 'right'=>0,

                 'stream'=>0,

                 'bottom'=>0,

                 'width'=>60,

                 'height'=>60,

                 'opacity'=>100

               )

           ),

           'image'=>array(

               array(

                   'url'=>$qrcode,         //二维码资源

                   'stream'=>0,

                   'left'=>110,

                   'top'=>-110,

                   'right'=>0,

                   'bottom'=>0,

                   'width'=>110,

                   'height'=>110,

                   'opacity'=>100

               )

           ),

           'background'=>'./images/poster.png'                  //背景图

       );

       $makeimg='./makeimg/mimg_'.time().'.png';

       if(!file_exists($makeimg)){

           $imgurl=substr(createPoster($url,$config,$makeimg),1);

       }else{

           $imgurl=substr($makeimg,1);

       }

       //echo createPoster($url,$config);exit;

       if(!empty($imgurl)){

           return '图片生成成功';

           //$data=array('msg'=>$imgurl,'status'=>'1');

       }else{

           return '图片生成失败';

           //$data=array('msg'=>'图片生成错误','status'=>'0');

       }

   }

   echo makeimg();

原文地址:https://www.cnblogs.com/alonesky/p/9954010.html