zoukankan      html  css  js  c++  java
  • 生成海报

    <?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();

  • 相关阅读:
    vue开发chrome扩展,数据通过storage对象获取
    Vue手动集成less预编译器
    Google Translate寻找之旅
    Javascript Range对象的学习
    Javascript Promises学习
    SublimeText 建立构建Node js系统
    We're sorry but demo3 doesn't work properly without JavaScript enabled. Please enable it to continue.
    npm安装包出现UNMET DEPENDENCY报错
    (转载)命令行说明中格式 尖括号 中括号的含义
    Linux重启网卡服务Failed to start LSB: Bring up/down networking.
  • 原文地址:https://www.cnblogs.com/alonesky/p/9954010.html
Copyright © 2011-2022 走看看