当前位置:首页 > CMS教程 > Thinkphp > 列表

thinkphp框架 如何利用GD库在图片上编写文字(代码范例)

发布:smiling 来源: PHP粉丝网  添加日期:2020-03-30 22:38:45 浏览: 评论:0 

本篇文章的主要内容是关于用GD库在图片上编写文字的代码范例,具有一定的参考价值,感兴趣的朋友可以学习了解一下,希望对你有帮助。

  1. <?php 
  2.  
  3. /** 
  4.  
  5.  * Created by PhpStorm. 
  6.  
  7.  * User: Administrator 
  8.  
  9.  */ 
  10.  
  11. namespace Home\Event; 
  12.  
  13.   
  14.  
  15. use \Think\Image; 
  16.  
  17. use \Think\Upload; 
  18.  
  19. class ImgEvent 
  20.  
  21.  
  22.   
  23.  
  24.     private $THINK_IMAGE = null; 
  25.  
  26.     private $THINK_UPLOAD = null; 
  27.  
  28.   
  29.  
  30.     public function __construct() 
  31.  
  32.     { 
  33.  
  34.         $this->THINK_IMAGE =  new Image(); 
  35.  
  36.         $this->THINK_UPLOAD =  new Upload(); 
  37.  
  38.     } 
  39.  
  40.   
  41.  
  42.     /* 
  43.  
  44.      * 保存base64文件 
  45.  
  46.      * $img    string    base64类型的文件 
  47.  
  48.      * $type   string    保存的文件类型 
  49.  
  50.      *      app_user_head_img   用户头像 
  51.  
  52.      * 
  53.  
  54.      * 
  55.  
  56.      */ 
  57.  
  58.     public function saveImg_base64($img = null , $type = null) 
  59.  
  60.     { 
  61.  
  62.         //获取保存图片配置 
  63.  
  64.         $imgConfig_savePath = C("img_save.save_path"); 
  65.  
  66.         $imgConfig_size     = C("img_save.size"); 
  67.  
  68.         $saveFlag = false; 
  69.  
  70. //        dump($imgConfig_savePath[$type]); 
  71.  
  72. //        dump($imgConfig_size); 
  73.  
  74.   
  75.  
  76.         if (preg_match('/^(data:\s*image\/(\w+);base64,)/'$img$result) && $imgConfig_savePath[$type]) 
  77.  
  78.         { 
  79.  
  80.   
  81.  
  82.             $img_ext                = $result[2]; //图片后缀 
  83.  
  84.             $img_header             = $result[1];//图片头信息 
  85.  
  86.             $new_file_name          = date('Ymd').'/'.uniqid().'.'.$img_ext
  87.  
  88.             $origin_img_path        = '';//原图的保存路径 
  89.  
  90.             $origin_img_save_flag   = true;// 
  91.  
  92.             foreach($imgConfig_savePath[$typeas $k => $v
  93.  
  94.             { 
  95.  
  96.   
  97.  
  98.                 if(!is_dir($v.date('Ymd'))) 
  99.  
  100.                 { 
  101.  
  102.                     mkdir($v.date('Ymd'),0777,true); 
  103.  
  104.                 } 
  105.  
  106.   
  107.  
  108.                 if ($k == 'origin'
  109.  
  110.                 { 
  111.  
  112.                     //先保存一份原图,然后其他尺寸的保存直接调用原图路径origin_img_path. 
  113.  
  114.                     $origin_res = file_put_contents($v.$new_file_namebase64_decode(str_replace($img_header''$img))); 
  115.  
  116.                     if (!$origin_res
  117.  
  118.                     { 
  119.  
  120.                         $origin_img_save_flag = false; 
  121.  
  122.                         break
  123.  
  124.                     } 
  125.  
  126.                     else 
  127.  
  128.                     { 
  129.  
  130.                         $saveFlag = $new_file_name
  131.  
  132.                         $origin_img_path = $v.$new_file_name
  133.  
  134.                         $this->THINK_IMAGE->open($origin_img_path); 
  135.  
  136.                     } 
  137.  
  138.                 } 
  139.  
  140.                 else 
  141.  
  142.                 { 
  143.  
  144.                     if ($origin_img_save_flag
  145.  
  146.                     { 
  147.  
  148.                         $width = $imgConfig_size[$type][$k]['w']; 
  149.  
  150.                         $height = $imgConfig_size[$type][$k]['h']; 
  151.  
  152.                         $this->THINK_IMAGE->thumb($width$height,3)->save($v.$new_file_name); 
  153.  
  154.                     } 
  155.  
  156.   
  157.  
  158.                 } 
  159.  
  160.             } 
  161.  
  162.   
  163.  
  164.         } 
  165.  
  166.         return $saveFlag
  167.  
  168.     } 
  169.  
  170.   
  171.  
  172.   
  173.  
  174.     /* 
  175.  
  176.      *  保存file类型文件 
  177.  
  178.      * 
  179.  
  180.      */ 
  181.  
  182.     public function saveImg_file($img = null , $type = null) 
  183.  
  184.     { 
  185.  
  186.   
  187.  
  188.         //获取保存图片配置 
  189.  
  190.         $imgConfig_savePath = C("img_save.save_path"); 
  191.  
  192.         $imgConfig_size     = C("img_save.size"); 
  193.  
  194.         $saveFlag = false; 
  195.  
  196.   
  197.  
  198.         if ($img && $imgConfig_savePath[$type]) 
  199.  
  200.         { 
  201.  
  202.   
  203.  
  204.             $origin_img_save_flag   = true; 
  205.  
  206.             foreach($imgConfig_savePath[$typeas $k => $v
  207.  
  208.             { 
  209.  
  210.   
  211.  
  212.                 if(!is_dir($v.date('Ymd'))) 
  213.  
  214.                 { 
  215.  
  216.                     mkdir($v.date('Ymd'),0777,true); 
  217.  
  218.                 } 
  219.  
  220.   
  221.  
  222.                 if ($k == 'origin'
  223.  
  224.                 { 
  225.  
  226.                     $this->THINK_UPLOAD->rootPath = $v
  227.  
  228.                     $this->THINK_UPLOAD->subName = date('Ymd'); 
  229.  
  230.                     $this->THINK_UPLOAD->saveName = array('uniqid',''); 
  231.  
  232.                     $saveRes = $this->THINK_UPLOAD->uploadOne($img); 
  233.  
  234.                     if (!$saveRes
  235.  
  236.                     { 
  237.  
  238.                         $origin_img_save_flag = false; 
  239.  
  240.                     } 
  241.  
  242.                     else 
  243.  
  244.                     { 
  245.  
  246.                         $saveFlag = true; 
  247.  
  248.                         $origin_img_path = $v.$saveRes['savepath'].$saveRes['savename']; 
  249.  
  250.                         $this->THINK_IMAGE->open($origin_img_path); 
  251.  
  252.                         $fileName = $saveRes['savepath'].$saveRes['savename']; 
  253.  
  254.                     } 
  255.  
  256.                 } 
  257.  
  258.                 else 
  259.  
  260.                 { 
  261.  
  262.                     if ($origin_img_save_flag
  263.  
  264.                     { 
  265.  
  266.                         $width = $imgConfig_size[$type][$k]['w']; 
  267.  
  268.                         $height = $imgConfig_size[$type][$k]['h']; 
  269.  
  270.                         $compress_img_path=$v.$fileName
  271.  
  272.                         $saveFlag = $this->THINK_IMAGE->thumb($width$height,3)->save($v.$fileName); 
  273.  
  274.   
  275.  
  276.                         if (!$saveFlag
  277.  
  278.                         { 
  279.  
  280.                             $saveFlag = false; 
  281.  
  282.                             $origin_img_save_flag = false; 
  283.  
  284.                         } 
  285.  
  286.   
  287.  
  288.                     } 
  289.  
  290.   
  291.  
  292.                 } 
  293.  
  294.   
  295.  
  296.   
  297.  
  298.             } 
  299.  
  300.   
  301.  
  302.             if($saveFlag
  303.  
  304.             { 
  305.  
  306.                 #$saveFlag = $fileName
  307.  
  308.                 $saveFlag = array('origin'=>get_current_Host().'/'.$origin_img_path,'compress'=>get_current_Host().'/'.$compress_img_path); 
  309.  
  310.             } 
  311.  
  312.   
  313.  
  314.         } 
  315.  
  316.         return $saveFlag
  317.  
  318.     } 
  319.  
  320.   
  321.  
  322.     public function save_file($img = null , $type = null) 
  323.  
  324.     { 
  325.  
  326.   
  327.  
  328.         //获取保存图片配置 
  329.  
  330.         $imgConfig_savePath = C("img_save.save_path"); 
  331.  
  332.         $saveFlag = false; 
  333.  
  334.   
  335.  
  336.         if ($img && $imgConfig_savePath[$type]) { 
  337.  
  338.   
  339.  
  340.   
  341.  
  342.                 if (!is_dir($imgConfig_savePath[$type] . date('Ymd'))) { 
  343.  
  344.                     mkdir($imgConfig_savePath[$type] . date('Ymd'), 0777, true); 
  345.  
  346.                 } 
  347.  
  348.                 $this->THINK_UPLOAD->rootPath = $imgConfig_savePath[$type]; 
  349.  
  350.                 $this->THINK_UPLOAD->subName = date('Ymd'); 
  351.  
  352.                 $this->THINK_UPLOAD->saveName = array('uniqid'''); 
  353.  
  354.                 $saveRes = $this->THINK_UPLOAD->uploadOne($img); 
  355.  
  356.                 if ($saveRes) { 
  357.  
  358.                     $saveFlag = true; 
  359.  
  360.                     $origin_img_path = $imgConfig_savePath[$type] . $saveRes['savepath'] . $saveRes['savename']; 
  361.  
  362.   
  363.  
  364.                     //$fileName = $saveRes['savepath'] . $saveRes['savename']; 
  365.  
  366.                 } 
  367.  
  368.             } 
  369.  
  370.   
  371.  
  372.   
  373.  
  374.             if($saveFlag
  375.  
  376.             { 
  377.  
  378.                 $saveFlag = $origin_img_path
  379.  
  380.                 return get_current_Host().'/'.$saveFlag
  381.  
  382.             }else 
  383.  
  384.             { 
  385.  
  386.                 return $saveFlag
  387.  
  388.             } 
  389.  
  390.   
  391.  
  392.   
  393.  
  394.     } 
  395.  
  396.   
  397.  
  398.   
  399.  
  400.   
  401.  
  402.   
  403.  
  404.     /* 
  405.  
  406.      *  保存file类型文件,多文件 
  407.  
  408.      * 
  409.  
  410.      */ 
  411.  
  412.     public function saveImgs_files($imgs = null , $type = null) 
  413.  
  414.     { 
  415.  
  416.   
  417.  
  418.         //获取保存图片配置s 
  419.  
  420.         $imgConfig_savePath = C("img_save.save_path"); 
  421.  
  422.         $imgConfig_size     = C("img_save.size"); 
  423.  
  424.         $saveFlag = false; 
  425.  
  426.         $imgResArr = array();//保存图片路径 
  427.  
  428.         $origin_img_path = array();//原图路径 
  429.  
  430.   
  431.  
  432.         if ($imgs && $imgConfig_savePath[$type]) 
  433.  
  434.         { 
  435.  
  436.   
  437.  
  438.             $origin_img_save_flag   = true; 
  439.  
  440.             foreach($imgConfig_savePath[$typeas $k => $v
  441.  
  442.             { 
  443.  
  444.   
  445.  
  446.                 if(!is_dir($v.date('Ymd'))) 
  447.  
  448.                 { 
  449.  
  450.                     mkdir($v.date('Ymd'),0777,true); 
  451.  
  452.                 } 
  453.  
  454.   
  455.  
  456.                 if ($k == 'origin'
  457.  
  458.                 { 
  459.  
  460.                     $this->THINK_UPLOAD->rootPath = $v
  461.  
  462.                     $this->THINK_UPLOAD->subName = date('Ymd'); 
  463.  
  464.                     $this->THINK_UPLOAD->saveName = array('uniqid',''); 
  465.  
  466.                     $saveRes = $this->THINK_UPLOAD->upload($imgs); 
  467.  
  468.   
  469.  
  470.                     if ($saveRes
  471.  
  472.                     { 
  473.  
  474.                         $saveFlag = true; 
  475.  
  476.                         foreach ($saveRes as $srK => $srV
  477.  
  478.                         { 
  479.  
  480.                             $origin_img_path[] = $v.$saveRes[$srK]['savepath'].$saveRes[$srK]['savename']; 
  481.  
  482.                             $fileName = $saveRes[$srK]['savepath'].$saveRes[$srK]['savename']; 
  483.  
  484.                             $imgResArr[] = $fileName
  485.  
  486.                         } 
  487.  
  488.   
  489.  
  490.   
  491.  
  492.                     } 
  493.  
  494.                 } 
  495.  
  496.                 else 
  497.  
  498.                 { 
  499.  
  500.                     foreach($origin_img_path as $oipK => $oipV
  501.  
  502.                     { 
  503.  
  504.                         if ($saveFlag
  505.  
  506.                         { 
  507.  
  508.                             $width = $imgConfig_size[$type][$k]['w']; 
  509.  
  510.                             $height = $imgConfig_size[$type][$k]['h']; 
  511.  
  512.                             $this->THINK_IMAGE->open($oipV); 
  513.  
  514.                             $saveThumb = $this->THINK_IMAGE->thumb($width$height,3)->save($v.$imgResArr[$oipK]); 
  515.  
  516.                             if (!$saveThumb
  517.  
  518.                             { 
  519.  
  520.                                 $saveFlag = false; 
  521.  
  522.                                 break
  523.  
  524.                             } 
  525.  
  526.                         } 
  527.  
  528.                     } 
  529.  
  530.   
  531.  
  532.                 } 
  533.  
  534.   
  535.  
  536.             } 
  537.  
  538.   
  539.  
  540.             if ($saveFlag
  541.  
  542.             { 
  543.  
  544.                 $saveFlag = $imgResArr
  545.  
  546.             } 
  547.  
  548.         } 
  549.  
  550.         return $saveFlag
  551.  
  552.     } 
  553.  
  554.   
  555.  
  556.     /* 
  557.  
  558.      * 保存微信头像 - url 
  559.  
  560.      * 
  561.  
  562.      */ 
  563.  
  564.     public function save_WxImg($picUrl = '',$type = null) 
  565.  
  566.     { 
  567.  
  568.   
  569.  
  570.         $ch = curl_init($picUrl); 
  571.  
  572.         curl_setopt($ch, CURLOPT_HEADER, 0); 
  573.  
  574.         curl_setopt($ch, CURLOPT_NOBODY, 0);    //对body进行输出。 
  575.  
  576.         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
  577.  
  578.         $package = curl_exec($ch); 
  579.  
  580.         $httpInfo = curl_getinfo($ch); 
  581.  
  582.         curl_close($ch); 
  583.  
  584.         $media = array_merge(array('mediaBody' => $package), $httpInfo); 
  585.  
  586.   
  587.  
  588.         //求出文件格式 
  589.  
  590.         preg_match('/\w\/(\w+)/i'$media["content_type"], $extmatches); 
  591.  
  592.         $fileExt = $extmatches[1]; 
  593.  
  594.   
  595.  
  596.         $saveName = md5(microtime(true)).".{$fileExt}"
  597.  
  598.   
  599.  
  600.         //获取保存图片配置 
  601.  
  602.         $imgConfig_savePath = C("img_save.save_path"); 
  603.  
  604.         $imgConfig_size     = C("img_save.size"); 
  605.  
  606.         $saveFlag = false; 
  607.  
  608.   
  609.  
  610.         if ($imgConfig_savePath[$type]) 
  611.  
  612.         { 
  613.  
  614.   
  615.  
  616.             $origin_img_save_flag   = true; 
  617.  
  618.             foreach($imgConfig_savePath[$typeas $k => $v
  619.  
  620.             { 
  621.  
  622.   
  623.  
  624.                 if(!is_dir($v.date('Ymd'))) 
  625.  
  626.                 { 
  627.  
  628.                     mkdir($v.date('Ymd'),0777,true); 
  629.  
  630.                 } 
  631.  
  632.   
  633.  
  634.                 if ($k == 'origin'
  635.  
  636.                 { 
  637.  
  638.                     file_put_contents($v.'/'.date('Ymd').'/'.$saveName,$media['mediaBody']); 
  639.  
  640.   
  641.  
  642.                     $origin_img_path = $v.'/'.date('Ymd').'/'.$saveName
  643.  
  644.                     $this->THINK_IMAGE->open($origin_img_path); 
  645.  
  646.                     $fileName = date('Ymd').'/'.$saveName
  647.  
  648.                 } 
  649.  
  650.                 else 
  651.  
  652.                 { 
  653.  
  654.                     if ($origin_img_save_flag
  655.  
  656.                     { 
  657.  
  658.                         $width = $imgConfig_size[$type][$k]['w']; 
  659.  
  660.                         $height = $imgConfig_size[$type][$k]['h']; 
  661.  
  662.                         $saveFlag = $this->THINK_IMAGE->thumb($width$height,3)->save($v.$fileName); 
  663.  
  664.   
  665.  
  666.                         if (!$saveFlag
  667.  
  668.                         { 
  669.  
  670.                             $saveFlag = false; 
  671.  
  672.                             $origin_img_save_flag = false; 
  673.  
  674.                         } 
  675.  
  676.                         else 
  677.  
  678.                         { 
  679.  
  680.                             $saveFlag = $fileName
  681.  
  682.                         } 
  683.  
  684.                     } 
  685.  
  686.   
  687.  
  688.                 } 
  689.  
  690.             } 
  691.  
  692.         } 
  693.  
  694.         return $saveFlag
  695.  
  696.   
  697.  
  698.     } 
  699.  
  700.   
  701.  
  702.     /* 
  703.  
  704.      *  保存file类型文件 
  705.  
  706.      * 
  707.  
  708.      */ 
  709.  
  710.     public function saveImg_Wx($WxImg = array() , $type = null) 
  711.  
  712.     { 
  713.  
  714.   
  715.  
  716.         //获取保存图片配置 
  717.  
  718.         $imgConfig_savePath = C("img_save.save_path"); 
  719.  
  720.         $imgConfig_size     = C("img_save.size"); 
  721.  
  722.         $saveFlag = false; 
  723.  
  724.         $imgResArr = array(); 
  725.  
  726.           
  727.  
  728.         if ($WxImg && $imgConfig_savePath[$type]) 
  729.  
  730.         { 
  731.  
  732.   
  733.  
  734.   
  735.  
  736.             foreach ($WxImg as $wiK => $wiV
  737.  
  738.             { 
  739.  
  740.   
  741.  
  742.                 $wxImg = $this->getWxImg($wiV); 
  743.  
  744.   
  745.  
  746.                 $origin_img_save_flag   = true; 
  747.  
  748.                 foreach($imgConfig_savePath[$typeas $k => $v
  749.  
  750.                 { 
  751.  
  752.   
  753.  
  754.                     if(!is_dir($v.date('Ymd'))) 
  755.  
  756.                     { 
  757.  
  758.                         mkdir($v.date('Ymd'),0777,true); 
  759.  
  760.                     } 
  761.  
  762.   
  763.  
  764.                     if ($k == 'origin'
  765.  
  766.                     { 
  767.  
  768.                         file_put_contents($v.'/'.date('Ymd').'/'.$wxImg['saveName'],$wxImg['imgMedia']['mediaBody']); 
  769.  
  770.   
  771.  
  772.                         $origin_img_path = $v.'/'.date('Ymd').'/'.$wxImg['saveName']; 
  773.  
  774.                         $this->THINK_IMAGE->open($origin_img_path); 
  775.  
  776.                         $fileName = date('Ymd').'/'.$wxImg['saveName']; 
  777.  
  778.                         $imgResArr[] = $fileName
  779.  
  780.                     } 
  781.  
  782.                     else 
  783.  
  784.                     { 
  785.  
  786.                         if ($origin_img_save_flag
  787.  
  788.                         { 
  789.  
  790.                             $width = $imgConfig_size[$type][$k]['w']; 
  791.  
  792.                             $height = $imgConfig_size[$type][$k]['h']; 
  793.  
  794.                             $saveFlag = $this->THINK_IMAGE->thumb($width$height,3)->save($v.$fileName); 
  795.  
  796.   
  797.  
  798.                             if (!$saveFlag
  799.  
  800.                             { 
  801.  
  802.                                 $saveFlag = false; 
  803.  
  804.                                 $origin_img_save_flag = false; 
  805.  
  806.                             } 
  807.  
  808.                             else 
  809.  
  810.                             { 
  811.  
  812.                                 $saveFlag = $fileName
  813.  
  814.                             } 
  815.  
  816.                         } 
  817.  
  818.   
  819.  
  820.                     } 
  821.  
  822.                 } 
  823.  
  824.             } 
  825.  
  826.   
  827.  
  828.   
  829.  
  830.             if($saveFlag
  831.  
  832.             { 
  833.  
  834.                 $saveFlag = $imgResArr
  835.  
  836.             } 
  837.  
  838.   
  839.  
  840.         } 
  841.  
  842.         return $saveFlag
  843.  
  844.     } 
  845.  
  846.    
  847.  
  848.   
  849.  
  850.     /* 
  851.  
  852.      * 保存用户的推广图片   在图片上写字!!!! 
  853.  
  854.      */ 
  855.  
  856.     public function save_userShareImg($bg_img_path = '' , $head_img_path = '' , $qrCode_img_path = '' , $saveFile = '' , $userName = '' , $userDscp = '' , $font_path = ''
  857.  
  858.     { 
  859.  
  860.   
  861.  
  862.           
  863.  
  864.         //设置头像图片为圆角 
  865.  
  866.         $head_img_radius = $this->radius_img($head_img_path,240); 
  867.  
  868.         //合并到背景图中 
  869.  
  870.         $this->mergeImage($bg_img_path,$head_img_radius,$saveFile,array('left' => 200, 'top' => 55, 'width' => 480, 'height' => 480)); 
  871.  
  872.         //设置名称 
  873.  
  874.         $this->writeText($saveFile$saveFile$userName,255,255,255,1010,32,$font_patharray()); 
  875.  
  876.         //设置二维码内容 
  877.  
  878.         $this->mergeImage($saveFile,$qrCode_img_path,$saveFile,array('left' => 255, 'top' => 684, 'width' => 250, 'height' => 245)); 
  879.  
  880.   
  881.  
  882.         return $saveFile
  883.  
  884.     } 
  885.  
  886.   
  887.  
  888.     /* 
  889.  
  890.      * 合并图片 
  891.  
  892.      */ 
  893.  
  894.     private function mergeImage($bg_img$main_img$saveFile$param
  895.  
  896.     { 
  897.  
  898.   
  899.  
  900.         extract($param); 
  901.  
  902. //        list($bgWidth, $bgHeight) = getimagesize($bg_img); 
  903.  
  904.         $bgImg = $this->imagecreate($bg_img); 
  905.  
  906.         if (!is_resource($main_img)) 
  907.  
  908.         { 
  909.  
  910.             list($mainWidth$mainHeight) = getimagesize($main_img); 
  911.  
  912.             $mainImg = $this->imagecreate($main_img); 
  913.  
  914.         } 
  915.  
  916.         else 
  917.  
  918.         { 
  919.  
  920.             $mainImg = $main_img
  921.  
  922.   
  923.  
  924.             $mainWidth = $width
  925.  
  926.             $mainHeight = $height
  927.  
  928.         } 
  929.  
  930.         imagecopyresized($bgImg$mainImg$left$top, 0, 0, $width$height$mainWidth$mainHeight); 
  931.  
  932. //        imagecopyresized($bgImg, $mainImg, $left, $top, 0, 0, $width, $height, $width,$height); 
  933.  
  934.         ob_start(); 
  935.  
  936.         // output jpeg (or any other chosen) format & quality 
  937.  
  938.         imagejpeg($bgImg, NULL, 100); 
  939.  
  940.         $contents = ob_get_contents(); 
  941.  
  942.         ob_end_clean(); 
  943.  
  944.         imagedestroy($bgImg); 
  945.  
  946.         imagedestroy($mainImg); 
  947.  
  948.         $fh = fopen($saveFile"w+"); 
  949.  
  950.         fwrite($fh$contents); 
  951.  
  952.         fclose($fh); 
  953.  
  954.     } 
  955.  
  956.   
  957.  
  958.     /* 
  959.  
  960.      * 图片写文字 
  961.  
  962.      * $bg_img 背景图片 
  963.  
  964.      * $saveFile 保存图片路径 
  965.  
  966.      * $text 文字 
  967.  
  968.      * $fontColor 字体颜色 
  969.  
  970.      * $top 图片距离顶端高度 
  971.  
  972.      * $fontSize 字体大小 
  973.  
  974.      * $font 字体路径 
  975.  
  976.      * $param 传递的参数 
  977.  
  978.      */ 
  979.  
  980.     private function writeText($bg_img$saveFile$text$colorR,$colorG,$colorB , $top , $fontSize , $font , $param = array()) 
  981.  
  982.     { 
  983.  
  984.         list($bgWidth$bgHeight) = getimagesize($bg_img); 
  985.  
  986.         $im = imagecreatefromjpeg($bg_img); 
  987.  
  988.   
  989.  
  990.         $fontColor = imagecolorallocate($im$colorR$colorG$colorB);//字的RGB颜色 
  991.  
  992.         $str = mb_convert_encoding($text"html-entities""utf-8");;//解决乱码问题 
  993.  
  994.   
  995.  
  996.         $fontBox = imagettfbbox($fontSize, 0, $font$str);//文字水平居中实质 
  997.  
  998.         $width = imagesx($im); 
  999.  
  1000.         imagettftext($im$fontSize, 0, ceil(($width - $fontBox[2]) / 2), $top$fontColor$font$str); 
  1001.  
  1002.   
  1003.  
  1004.   
  1005.  
  1006.         ob_start(); 
  1007.  
  1008.         // output jpeg (or any other chosen) format & quality 
  1009.  
  1010.         imagejpeg($im, NULL, 100); 
  1011.  
  1012.         $contents = ob_get_contents(); 
  1013.  
  1014.         ob_end_clean(); 
  1015.  
  1016.         imagedestroy($im); 
  1017.  
  1018.         $fh = fopen($saveFile"w+"); 
  1019.  
  1020.         fwrite($fh$contents); 
  1021.  
  1022.         fclose($fh); 
  1023.  
  1024.     } 
  1025.  
  1026.   
  1027.  
  1028.     /** 
  1029.  
  1030.      * 处理圆角图片 
  1031.  
  1032.      * @param  string $imgPath 源图片路径 
  1033.  
  1034.      * @param  integer $radius 圆角半径长度默认为15,处理成圆型 
  1035.  
  1036.      * @return [type]           [description] 
  1037.  
  1038.      */ 
  1039.  
  1040.     public function radius_img($imgPath = ''$radius = 65) 
  1041.  
  1042.     { 
  1043.  
  1044.         $ext = pathinfo($imgPath); 
  1045.  
  1046.         $src_img = null; 
  1047.  
  1048.         switch ($ext['extension']) { 
  1049.  
  1050.             case 'jpg'
  1051.  
  1052.                 $src_img = imagecreatefromjpeg($imgPath); 
  1053.  
  1054.                 break
  1055.  
  1056.             case 'png'
  1057.  
  1058.                 $src_img = imagecreatefrompng($imgPath); 
  1059.  
  1060.                 break
  1061.  
  1062.             default
  1063.  
  1064.                 $src_img = imagecreatefromjpeg($imgPath); 
  1065.  
  1066.                 break
  1067.  
  1068.         } 
  1069.  
  1070.         $wh = getimagesize($imgPath); 
  1071.  
  1072.         $w = $wh[0]; 
  1073.  
  1074.         $h = $wh[1]; 
  1075.  
  1076.         // $radius = $radius == 0 ? (min($w, $h) / 2) : $radius; 
  1077.  
  1078.         $img = imagecreatetruecolor($w$h); 
  1079.  
  1080.         //这一句一定要有 
  1081.  
  1082.         imagesavealpha($img, true); 
  1083.  
  1084.         //拾取一个完全透明的颜色,最后一个参数127为全透明 
  1085.  
  1086.         $bg = imagecolorallocatealpha($img, 255, 255, 255, 127); 
  1087.  
  1088.         imagefill($img, 0, 0, $bg); 
  1089.  
  1090.         $r = $radius//圆 角半径 
  1091.  
  1092.         for ($x = 0; $x < $w$x++) { 
  1093.  
  1094.             for ($y = 0; $y < $h$y++) { 
  1095.  
  1096.                 $rgbColor = imagecolorat($src_img$x$y); 
  1097.  
  1098.                 if (($x >= $radius && $x <= ($w - $radius)) || ($y >= $radius && $y <= ($h - $radius))) { 
  1099.  
  1100.                     //不在四角的范围内,直接画 
  1101.  
  1102.                     imagesetpixel($img$x$y$rgbColor); 
  1103.  
  1104.                 } else { 
  1105.  
  1106.                     //在四角的范围内选择画 
  1107.  
  1108.                     //上左 
  1109.  
  1110.                     $y_x = $r//圆心X坐标 
  1111.  
  1112.                     $y_y = $r//圆心Y坐标 
  1113.  
  1114.                     if (((($x - $y_x) * ($x - $y_x) + ($y - $y_y) * ($y - $y_y)) <= ($r * $r))) { 
  1115.  
  1116.                         imagesetpixel($img$x$y$rgbColor); 
  1117.  
  1118.                     } 
  1119.  
  1120.                     //上右 
  1121.  
  1122.                     $y_x = $w - $r//圆心X坐标 
  1123.  
  1124.                     $y_y = $r//圆心Y坐标 
  1125.  
  1126.                     if (((($x - $y_x) * ($x - $y_x) + ($y - $y_y) * ($y - $y_y)) <= ($r * $r))) { 
  1127.  
  1128.                         imagesetpixel($img$x$y$rgbColor); 
  1129.  
  1130.                     } 
  1131.  
  1132.                     //下左 
  1133.  
  1134.                     $y_x = $r//圆心X坐标 
  1135.  
  1136.                     $y_y = $h - $r//圆心Y坐标 
  1137.  
  1138.                     if (((($x - $y_x) * ($x - $y_x) + ($y - $y_y) * ($y - $y_y)) <= ($r * $r))) { 
  1139.  
  1140.                         imagesetpixel($img$x$y$rgbColor); 
  1141.  
  1142.                     } 
  1143.  
  1144.                     //下右 
  1145.  
  1146.                     $y_x = $w - $r//圆心X坐标 
  1147.  
  1148.                     $y_y = $h - $r//圆心Y坐标 
  1149.  
  1150.                     if (((($x - $y_x) * ($x - $y_x) + ($y - $y_y) * ($y - $y_y)) <= ($r * $r))) { 
  1151.  
  1152.                         imagesetpixel($img$x$y$rgbColor); 
  1153.  
  1154.                     } 
  1155.  
  1156.                 } 
  1157.  
  1158.             } 
  1159.  
  1160.         } 
  1161.  
  1162.         return $img
  1163.  
  1164.     } 
  1165.  
  1166.   
  1167.  
  1168.     private function imagecreate($bg
  1169.  
  1170.     { 
  1171.  
  1172.         $bgImg = @imagecreatefromjpeg($bg); 
  1173.  
  1174.         if (FALSE == $bgImg) { 
  1175.  
  1176.             $bgImg = @imagecreatefrompng($bg); 
  1177.  
  1178.         } 
  1179.  
  1180.         if (FALSE == $bgImg) { 
  1181.  
  1182.             $bgImg = @imagecreatefromgif($bg); 
  1183.  
  1184.         } 
  1185.  
  1186.         return $bgImg
  1187.  
  1188.     } 
  1189.  
  1190.   
  1191.  
  1192.   
  1193.  
  1194.     /* 
  1195.  
  1196.      * 下载微信服务器的图片 
  1197.  
  1198.      * media_id    微信的媒体id 
  1199.  
  1200.      * type        保存图片类型 
  1201.  
  1202.      * */ 
  1203.  
  1204.     public function getWxImg($mediaId
  1205.  
  1206.     { 
  1207.  
  1208.         if(!class_exists('\JSSDK') && !class_exists('\WxPayConfig')) 
  1209.  
  1210.         { 
  1211.  
  1212.             vendor('wxsdkapi.jssdk'); 
  1213.  
  1214.             vendor('wxpayapi.lib.WxPay#Config'); 
  1215.  
  1216.         } 
  1217.  
  1218.         $res = new \JSSDK(C('WEIXINPAY_CONFIG.APPID'),C('WEIXINPAY_CONFIG.APPSECRET')); 
  1219.  
  1220.         $accessToken = $res->getAccessToken(); 
  1221.  
  1222.       
  1223.  
  1224. //    $mediaId = 'cVqPIhDPPThUtayzS27GK6RN4-dseA6AZnTJxcg7_VaeuAaKcL53X32hmKxhgiSD'; 
  1225.  
  1226. //    $accessToken = 'KHaopJY444kJ06LcH9ESj-73pkEfFTgIr3L45RURuUxv1KTjgXyFepJ-cTIF_oUyAKyYb5dK2r9L_wC-WDw2USqGQBMobC6DzPImuhPqxB8jxZ41CuLDtJiaEZk8Vf5kWSSjAAAAWW'; 
  1227.  
  1228.         $picUrl = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=$accessToken&media_id=$mediaId"
  1229.  
  1230.   
  1231.  
  1232.         $ch = curl_init($picUrl); 
  1233.  
  1234.         curl_setopt($ch, CURLOPT_HEADER, 0); 
  1235.  
  1236.         curl_setopt($ch, CURLOPT_NOBODY, 0);    //对body进行输出。 
  1237.  
  1238.         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
  1239.  
  1240.         $package = curl_exec($ch); 
  1241.  
  1242.         $httpInfo = curl_getinfo($ch); 
  1243.  
  1244.         curl_close($ch); 
  1245.  
  1246.         $media = array_merge(array('mediaBody' => $package), $httpInfo); 
  1247.  
  1248.   
  1249.  
  1250.         //求出文件格式 
  1251.  
  1252.         preg_match('/\w\/(\w+)/i'$media["content_type"], $extmatches); 
  1253.  
  1254.         $fileExt = $extmatches[1]; 
  1255.  
  1256.   
  1257.  
  1258.         $saveName = md5(microtime(true)).".{$fileExt}"
  1259.  
  1260.   
  1261.  
  1262.         $img = array('imgMedia'=>$media,'saveName'=>$saveName); 
  1263.  
  1264.   
  1265.  
  1266.         return $img
  1267.  
  1268.     } 
  1269.  
  1270.         /* 
  1271.  
  1272.      * 下载微信服务器的图片 
  1273.  
  1274.      * media_id    微信的媒体id 
  1275.  
  1276.      * type        保存图片类型 
  1277.  
  1278.      * */ 
  1279.  
  1280.     public function getWxImg2($mediaId,$file
  1281.  
  1282.     { 
  1283.  
  1284.         if(!class_exists('\JSSDK') && !class_exists('\WxPayConfig')) 
  1285.  
  1286.         { 
  1287.  
  1288.             vendor('wxsdkapi.jssdk'); 
  1289.  
  1290.             vendor('wxpayapi.lib.WxPay#Config'); 
  1291.  
  1292.         } 
  1293.  
  1294.         $res = new \JSSDK(C('WEIXINPAY_CONFIG.APPID'),C('WEIXINPAY_CONFIG.APPSECRET')); 
  1295.  
  1296.         $accessToken = $res->getAccessToken(); 
  1297.  
  1298.         $picUrl = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=$accessToken&media_id=$mediaId"
  1299.  
  1300.       
  1301.  
  1302.           
  1303.  
  1304.          
  1305.  
  1306.   
  1307.  
  1308.         return httpcopy($picUrl,$file); 
  1309.  
  1310.     } 
  1311.  
  1312.   
  1313.  

调用方法:

  1. /** 
  2.  
  3.      * 生成图片 
  4.  
  5.      * @param varchar  tid 任务id 
  6.  
  7.      * @httpmethod POST 
  8.  
  9.      * @response 响应数据 
  10.  
  11.      * { 
  12.  
  13.      *   "ResultType": "1000", 
  14.  
  15.      *   "Message": "上传成功", 
  16.  
  17.      *   "AppendData": "图片路径", 
  18.  
  19.      * } 
  20.  
  21.      */ 
  22.  
  23.     public function UploadNavImg() 
  24.  
  25.     { 
  26.  
  27.         $tid=Util::getSafeText(I('post.tid')); 
  28.  
  29.         $imgEven = A('Gszc/Img','Event'); 
  30.  
  31.         //查出公司名称 
  32.  
  33.         $res = M('gszc_tasks as t'
  34.  
  35.             ->join('app_gszc_userinfo as u on u.tid=t.id'
  36.  
  37.             ->where('t.id='.$tid
  38.  
  39.             ->field('u.*,t.lastname'
  40.  
  41.             ->find(); 
  42.  
  43.   
  44.  
  45.         //主营业务范围 
  46.  
  47.         $zyywfws = explode('、',$res['zyywfw']); 
  48.  
  49.         $zyywfw = array_slice($zyywfws, 0,3);  //获取前三个主营业范围 
  50.  
  51.         $zyywfw2 = array_slice($zyywfws, 3,6);  //获取后三个主营业务范围 
  52.  
  53.   
  54.  
  55.         $imageName = date("His",time())."_".rand(1111,9999).'.jpg'
  56.  
  57.         $dir = date('Ymd'); 
  58.  
  59.         $path = 'uploads/company/'.$dir
  60.  
  61.         if (!is_dir($path)){ //判断目录是否存在 不存在就创建 
  62.  
  63.             mkdir($path,0777,true); 
  64.  
  65.         } 
  66.  
  67.         $img = $imgEven->save_userShareImg($_SERVER['DOCUMENT_ROOT']."/uploads/test.png",'','',$_SERVER['DOCUMENT_ROOT']."/".$path."/"$imageName,$res['lastname'],$zyywfw$zyywfw2'',$_SERVER['DOCUMENT_ROOT']."/uploads/PingFang Bold.ttf"); 
  68.  
  69.   
  70.  
  71.         if($img){ 
  72.  
  73.             //生成照片成功 保存到任务表里 
  74.  
  75.             $tasks = M('gszc_tasks')->where('id='.$tid)->setField('lastpic',$path."/".$imageName); 
  76.  
  77.             if($tasks){ 
  78.  
  79.                 $lujing = $path."/".$imageName
  80.  
  81.                 $this->array_return['errno']=self::__OK__; 
  82.  
  83.                 $this->array_return['errmsg']='生成成功!'
  84.  
  85.                 $this->array_return['data']= $lujing ; 
  86.  
  87.                 $this->ajaxReturn($this->array_return); 
  88.  
  89.             } 
  90.  
  91.         }else
  92.  
  93.             $this->array_return['errno']=self::__ERROR__; 
  94.  
  95.             $this->array_return['errmsg']='生成失败!'
  96.  
  97.             $this->array_return['data']=[]; 
  98.  
  99.             $this->ajaxReturn($this->array_return); 
  100.  
  101.         } 
  102.  
  103.     } 

Tags: thinkphp框架

分享到: