文档章节

PHP生成PNG图片

mickelfeng
 mickelfeng
发布于 2013/01/23 11:26
字数 625
阅读 130
收藏 0
问题一:
图片通过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
         * @return 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;
        }

本文转载自:

mickelfeng

mickelfeng

粉丝 237
博文 2801
码字总数 604565
作品 0
成都
高级程序员
私信 提问
PHP图片缩放函数:实现等比例不失真缩放

function resizeImage($im,$maxwidth,$maxheight,$name,$filetype){ } 参数说明: $im 图片对象,应用函数之前,你需要用imagecreatefromjpeg()读取图片对象,如果PHP环境支持PNG,GIF,也可...

微wx笑
2015/01/30
0
0
phpqrcode-二维码

下载 2016/11/15日 官网 phpqrcode-2010100721_1.1.4.zip 文件结构 类文件 demo1简单调用: png()参数: png($text, $outfile = false, $level = QRECLEVELL, $size = 3, $margin = 4, $sav......

金于虎
2016/11/15
22
0
Minho/php-captcha

php-captcha 简单的php验证码库。 PHP生成验证码图片 PHP生成验证码的原理:使用PHP的GD库,生成一张带验证码的图片,并将验证码保存在Session中。PHP生成验证码的大致流程有: 1、产生一张p...

Minho
2017/01/15
0
0
使用PHP QRCode类库生成二维码

QRCode是一个PHP二维码生成类库,利用它可以轻松生成二维码,官网提供了下载: http://phpqrcode.sourceforge.net/ 下载后,只需要使用phpqrcode.php就可以生成二维码了,当然您的PHP环境必须...

xdl丶辉
2016/08/11
1K
0
实用、免费的便民接口(生成二维码、拼音转换等)

根据文本内容,生成二维码 接口链接:http://api.okayapi.com/?s=Ext.QrCode.Png&data=dogstar 功能说明: 可根据传入的文本内容,生成对应的二维码,还可以调整尺寸大小。可以直接输出png图...

暗夜在火星
2018/01/28
74
0

没有更多内容

加载失败,请刷新页面

加载更多

定期批量改密,实现高效运维,保障口令安全

随着企业IT资产规模的不断增大,各类主机、应用系统的管理也变得愈加困难。 对于系统管理员来说,保证操作系统的密码安全是其重要工作,在需要维护众多的主机时,其面临的困境将是: 1、难以...

堡垒啊
45分钟前
5
0
怎样在磁盘上查找MySQL表的大小?这里有答案

导读 我想知道 MySQL 表在磁盘上占用多少空间,但看起来很琐碎。不应该在 INFORMATION_SCHEMA.TABLES 中提供这些信息吗?没那么简单! 我想知道 MySQL 表在磁盘上占用多少空间,但看起来很琐碎...

问题终结者
今天
6
0
jQuery load() 方法实现加载远程数据

jQuery load() 方法是简单但强大的 AJAX 方法。load() 方法从服务器加载数据,并把返回的数据放入被选元素中。 语法: $(selector).load(URL,data,callback);必需的 URL 参数规定您希望加载的...

前端老手
今天
5
0
Spring Boot缓存实战 Redis 设置有效时间和自动刷新缓存-2

问题 上一篇Spring Boot Cache + redis 设置有效时间和自动刷新缓存,时间支持在配置文件中配置,说了一种时间方式,直接扩展注解的Value值,如: @Override@Cacheable(value = "people#${s...

xiaolyuh
今天
14
0
怎样在磁盘上查找MySQL表的大小?这里有答案

我想知道 MySQL 表在磁盘上占用多少空间,但看起来很琐碎。不应该在 INFORMATION_SCHEMA.TABLES 中提供这些信息吗?没那么简单! 我想知道 MySQL 表在磁盘上占用多少空间,但看起来很琐碎。不应...

Linux就该这么学
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部