博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP生成PNG图片
阅读量:6376 次
发布时间:2019-06-23

本文共 4358 字,大约阅读时间需要 14 分钟。

hot3.png

问题一:
图片通过GD库生成会出现文字漂白问题,或者不显示,调试浪费了我半天的时间
合成图片颜色是真问题,困扰我很久最后解决了
原来imagecreate不支持更多的色彩
imagecreatetruecolor解决了这个问题
本函数需要 GD 2.0.1 或更高版本(推荐 2.0.28 及更高版本)。
代码如下
/**         * @desc 创建结果图片         * @param         * @return file         */        public function create_userimg() {                           $user_name = addslashes($this->input->get('name'));                $user_name = urldecode($user_name);                $user_score = (int)$this->input->get('score');                           if (preg_match("/^[x7f-xff]+$/", $user_name)) {                $user_name_len =  mb_strlen($user_name);                    $user_name_len = ceil($user_name_len/3);                    $nickleft = 30+60*$user_name_len;                }else{                    $user_name_len =  strlen($user_name);                                       $nickleft = 120+13*$user_name_len;                }                                 $font = '.'.PATH_FONT.'/yahei.ttf';                $font_kaiti = '.'.PATH_FONT.'/SIMLI.TTF';                $size = 25;                               //$bgimg = 'resource/default/images/lohas/result_bg.png';                $bgimg = 'resource/default/images/shishang/result_show.png';                $nick = 'resource/default/images/shishang/shishang_nick.png';                               $im = @imagecreatetruecolor(506,432) or die("Cannot Initialize new GD image stream");        $white = imagecolorallocate( $im, 255, 255, 255 );        imagefill( $im, 0, 0, $white );            imagecopy($im, $this->Image, 0, 0, 0, 0, 506, 432);                           $bgimg = imagecreatefrompng($bgimg);                imagecopy($im,$bgimg,0,0,0,0,506,432);                               $nick = imagecreatefrompng($nick);                imagecopy($im,$nick,$nickleft,136,0,0,77,14);                                              $green=imagecolorallocate($im,68,160,28);                $hei=imagecolorallocate($im,0,0,0);                $bai=imagecolorallocate($im,255,255,255);                       if (preg_match("/^[x7f-xff]+$/", $user_name)) {                    imagettftext($im,'25',0,62,150,$hei,$font_kaiti,$user_name);                }else{                    imagettftext($im,'21',0,62,150,$hei,$font,$user_name);                }                               imagettftext($im,'12',0,70,209,$green,$font,$text_1);                               imagettftext($im,'11',0,170,238,$green,$font,$text_2);                               imagettftext($im,'12',0,360,210,$green,$font,$score);                               imagettftext($im,'11',0,95,237,$green,$font,$user_vs);                               imagettftext($im,'10',0,330,340,$hei,$font,$date_text);                                       header("Content-type: image/png");                imagepng($im);                imagedestroy($im);        }
问题二:
PHP中文换行问题,因为文字要写在图片里,类似css的自动换行,
php对英文有wordwrap()函数支持换行,但不支持中文,下面函数解决了PHP中文换行问题
代码如下
/**
     * @desc GD库生成图片中文自动换行
     * 这几个变量分别是 字体大小, 角度, 字体名称, 字符串, 预设宽度
     * */
    public function autowrap($fontsize, $angle, $fontface, $string, $width) {
        $content = "";
 
        // 将字符串拆分成一个个单字 保存到数组 letter 中
        for ($i=0;$i<mb_strlen($string);$i++) {
            $letter[] = mb_substr($string, $i, 1);
        }
       
        foreach ($letter as $l) {
            $teststr = $content."".$l;
            $testbox = imagettfbbox($fontsize, $angle, $fontface, $teststr);
            // 判断拼接后的字符串是否超过预设的宽度
            if (($testbox[2] > $width) && ($content !== "")) {
                $content .= "n";
            }
            $content .= $l;
        }
       
        $content = mb_convert_encoding($content, "html-entities","utf-8" );
       
        return $content;
    }
问题三:
我在调用数据库接口的时候,取XML中的CDATA数据
解析XML中带有<!CDATA>问题,“  <name><![CDATA[Lois & Clark]]></name>”,
CDATA中的数据取不到值,simplexml_load_string函数解决问题
simplexml_load_string($response, SimpleXMLElement , LIBXML_NOCDATA);
代码如下
 /**
         * @desc CURL提交XML返回食材库XMl数据
         * @param STRING XML
         * XML
         */
    private function do_curl_post($xmldata){
       
            $url = SITE_URL.$this->shicai_interface;
 
            $header[] = "Content-type: text/xml";
            $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $xmldata);
        $response = curl_exec($ch);
        $response = simplexml_load_string($response, SimpleXMLElement , LIBXML_NOCDATA);
 
        if(curl_errno($ch)){
            print curl_error($ch);
        }
        curl_close($ch);
        return $response;
        }

转载于:https://my.oschina.net/mickelfeng/blog/103991

你可能感兴趣的文章
RIPv1 PK RIPv2
查看>>
基于WorsPress+Xampp搭建博客
查看>>
noclobber:避免文件的重写
查看>>
Weblogic多应用部署在一个域下导致session冲突
查看>>
安装Centos6 分区时出现缺少/boot/efi 经验分享
查看>>
一个关于Cobar 的释疑
查看>>
知识点-PAE
查看>>
Android音频开发(3):如何播放一帧音频
查看>>
javascript的一些基本概念
查看>>
Rsync、Inotify-tools简介
查看>>
为何放弃Eclipse,最终转向IntelliJ
查看>>
Qt/Embedded开发环境的的搭建(二)
查看>>
关于Tomcat上请求的编解码问题
查看>>
WPF“动画序列”框架的初步研究与实现(附源码)
查看>>
Windows Server 2008 多元密码策略配置
查看>>
.NET中的泛型和Java泛型中的类型擦除
查看>>
白利用的集大成者:新型远控木马上演移形换影大法
查看>>
SAS 2016年全球营收达32亿美元 继续保持稳步增长
查看>>
2017必备的八款最佳反勒索软件工具
查看>>
从Effective Java总结一些有助安卓开发的建议
查看>>