热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP生成PNG图像时的文字换行处理及解析含CDATA段的XML文件方法探讨

在开发过程中,针对PHP生成PNG图像时的文字换行处理以及解析包含CDATA段的XML文件的方法进行了深入研究。通过编写特定的函数,成功解决了这些问题,为后续类似场景提供了宝贵的实践经验和技术支持。




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

            $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 ;



    }





推荐阅读
  • 本文详细探讨了HTML表单中GET和POST请求的区别,包括它们的工作原理、数据传输方式、安全性及适用场景。同时,通过实例展示了如何在Servlet中处理这两种请求。 ... [详细]
  • 本文深入探讨了HTTP请求和响应对象的使用,详细介绍了如何通过响应对象向客户端发送数据、处理中文乱码问题以及常见的HTTP状态码。此外,还涵盖了文件下载、请求重定向、请求转发等高级功能。 ... [详细]
  • 本文介绍如何使用 Android 的 Canvas 和 View 组件创建一个简单的绘图板应用程序,支持触摸绘画和保存图片功能。 ... [详细]
  • 深入理解Tornado模板系统
    本文详细介绍了Tornado框架中模板系统的使用方法。Tornado自带的轻量级、高效且灵活的模板语言位于tornado.template模块,支持嵌入Python代码片段,帮助开发者快速构建动态网页。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • 如何高效创建和使用字体图标
    在Web和移动开发中,为什么选择字体图标?主要原因是其卓越的性能,可以显著减少HTTP请求并优化页面加载速度。本文详细介绍了从设计到应用的字体图标制作流程,并提供了专业建议。 ... [详细]
  • 解决Element UI中Select组件创建条目为空时报错的问题
    本文介绍如何在Element UI的Select组件中使用allow-create属性创建新条目,并处理创建条目为空时出现的错误。我们将详细说明filterable属性的必要性,以及default-first-option属性的作用。 ... [详细]
  • Ihaveastringwithquotesaroundthepathasfollows:我在路径周围有一个带引号的字符串,如下所示:C:\ProgramFiles(x ... [详细]
  • 深入解析Redis内存对象模型
    本文详细介绍了Redis内存对象模型的关键知识点,包括内存统计、内存分配、数据存储细节及优化策略。通过实际案例和专业分析,帮助读者全面理解Redis内存管理机制。 ... [详细]
  • 使用lambda表达式排序Collections.sort(temp,(Stringa,Stringb)-{returnb.compareTo(a);});Collections ... [详细]
  • 利用决策树预测NBA比赛胜负的Python数据挖掘实践
    本文通过使用2013-14赛季NBA赛程与结果数据集以及2013年NBA排名数据,结合《Python数据挖掘入门与实践》一书中的方法,展示如何应用决策树算法进行比赛胜负预测。我们将详细讲解数据预处理、特征工程及模型评估等关键步骤。 ... [详细]
  • 如何在PHPCMS V9中实现多站点功能并配置独立域名与动态URL
    本文介绍如何在PHPCMS V9中创建和管理多个站点,包括配置独立域名、设置动态URL,并确保各子站能够正常运行。我们将详细讲解从新建站点到最终配置路由的每一步骤。 ... [详细]
  • 反向投影技术主要用于在大型输入图像中定位特定的小型模板图像。通过直方图对比,它能够识别出最匹配的区域或点,从而确定模板图像在输入图像中的位置。 ... [详细]
author-avatar
石头1988030450
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有