网站地图    收藏   

主页 > 后端 > php资料库 >

PHP生成PNG图片,文字换行问题,和解析XML中带有CD

来源:自学PHP网    时间:2014-12-04 22:12 作者: 阅读:

[导读] 出院后我负责开发的应用马上就要上线了 开发几天遇到这样几个问题,都解决了,以后在遇到类似的问题就不会这么麻烦了 以下是我实际应用中写的几个函数,可以重复利用 :) 问题...

出院后我负责开发的应用马上就要上线了
开发几天遇到这样几个问题,都解决了,以后在遇到类似的问题就不会这么麻烦了
以下是我实际应用中写的几个函数,可以重复利用 :)

问题一:
图片通过GD库生成会出现文字漂白问题,或者不显示,调试浪费了我半天的时间
合成图片颜色是真问题,困扰我很久最后解决了
原来imagecreate不支持更多的色彩
imagecreatetruecolor解决了这个问题
本函数需要 GD 2.0.1 或更高版本(推荐 2.0.28 及更高版本)。
 

代码如下
  1.         /**
  2.          * @desc 创建结果图片
  3.          * @param
  4.          * @return file
  5.          */
  6.         public function create_userimg() {
  7.            
  8.                 $user_name = addslashes($this->input->get('name'));
  9.                 $user_name = urldecode($user_name);
  10.                 $user_score = (int)$this->input->get('score');
  11.                
  12.             if (preg_match("/^[x7f-xff]+$/", $user_name)) {
  13.                 $user_name_len =  mb_strlen($user_name);
  14.                     $user_name_len = ceil($user_name_len/3);
  15.                     $nickleft = 30+60*$user_name_len;
  16.                 }else{
  17.                     $user_name_len =  strlen($user_name);
  18.                    
  19.                     $nickleft = 120+13*$user_name_len;
  20.                 }                
  21.  
  22.                 $font = '.'.PATH_FONT.'/yahei.ttf';
  23.                 $font_kaiti = '.'.PATH_FONT.'/SIMLI.TTF';
  24.                 $size = 25;
  25.                
  26.                 //$bgimg = 'resource/default/images/lohas/result_bg.png';
  27.                 $bgimg = 'resource/default/images/shishang/result_show.png';
  28.                 $nick = 'resource/default/images/shishang/shishang_nick.png';
  29.                
  30.                 $im = @imagecreatetruecolor(506,432) or die("Cannot Initialize new GD image stream");
  31.         $white = imagecolorallocate( $im, 255, 255, 255 );
  32.         imagefill( $im, 0, 0, $white );
  33.             imagecopy($im, $this->Image, 0, 0, 0, 0, 506, 432);
  34.            
  35.                 $bgimg = imagecreatefrompng($bgimg);
  36.                 imagecopy($im,$bgimg,0,0,0,0,506,432);
  37.                
  38.                 $nick = imagecreatefrompng($nick);
  39.                 imagecopy($im,$nick,$nickleft,136,0,0,77,14);
  40.                
  41.                
  42.                 $green=imagecolorallocate($im,68,160,28);
  43.                 $hei=imagecolorallocate($im,0,0,0);
  44.                 $bai=imagecolorallocate($im,255,255,255);
  45.        
  46.                 if (preg_match("/^[x7f-xff]+$/", $user_name)) {
  47.                     imagettftext($im,'25',0,62,150,$hei,$font_kaiti,$user_name);
  48.                 }else{
  49.                     imagettftext($im,'21',0,62,150,$hei,$font,$user_name);
  50.                 }
  51.                
  52.                 imagettftext($im,'12',0,70,209,$green,$font,$text_1);
  53.                
  54.                 imagettftext($im,'11',0,170,238,$green,$font,$text_2);
  55.                
  56.                 imagettftext($im,'12',0,360,210,$green,$font,$score);
  57.                
  58.                 imagettftext($im,'11',0,95,237,$green,$font,$user_vs);
  59.                
  60.                 imagettftext($im,'10',0,330,340,$hei,$font,$date_text);
  61.  
  62.                
  63.        
  64.                 header("Content-type: image/png");
  65.                 imagepng($im);
  66.                 imagedestroy($im);
  67.         }


 
问题二:
PHP中文换行问题,因为文字要写在图片里,类似css的自动换行,
php对英文有wordwrap()函数支持换行,但不支持中文,下面函数解决了PHP中文换行问题

代码如下
  1. /**
  2.      * @desc GD库生成图片中文自动换行
  3.      * 这几个变量分别是 字体大小, 角度, 字体名称, 字符串, 预设宽度
  4.      * */
  5.     public function autowrap($fontsize, $angle, $fontface, $string, $width) {
  6.         $content = "";
  7.  
  8.         // 将字符串拆分成一个个单字 保存到数组 letter 中
  9.         for ($i=0;$i<mb_strlen($string);$i++) {
  10.             $letter[] = mb_substr($string, $i, 1);
  11.         }
  12.        
  13.         foreach ($letter as $l) {
  14.             $teststr = $content."".$l;
  15.             $testbox = imagettfbbox($fontsize, $angle, $fontface, $teststr);
  16.             // 判断拼接后的字符串是否超过预设的宽度
  17.             if (($testbox[2] > $width) && ($content !== "")) {
  18.                 $content .= "n";
  19.             }
  20.             $content .= $l;
  21.         }
  22.        
  23.         $content = mb_convert_encoding($content, "html-entities","utf-8" );
  24.        
  25.         return $content;
  26.     }

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论