图片处理,是许多程序的功能之一;而文字渲染则是绘图的基本组成部分。PHP通过很多扩展库来支持图片的处理,最常用的还是GD库,通过一系列imagexxx()函数来提供绘图功能。本文专注于非常细小的一点:绘制文字。熟悉Win32的人都知道,TextOut()就可以轻松显示任何文字了,然而到了PHP的世界里,有些事情并不轻松。

1 详细解释imageTtfText()函数

对于PHP绘图初学者,首先遇到的一个问题就是,imageString()这个函数并不支持汉字的绘制。这往往会给入门者当头一棒,不过不要着急,因为还有一个imageTtfText()函数,这个函数能绘制UTF-8编码的字符串,当然可以绘制汉字了。然而使用它并不十分简单。先来看看其原型声明:

PHP的imageTtfText()函数深入详解

一共有8个参数,缺一不可,而且官方文档这些参数的解释并不透彻,这里笔者尽力做更详细清晰的解释:

(1)$image"text-align: center;">PHP的imageTtfText()函数深入详解

PHP的imageTtfText()函数深入详解

PHP的imageTtfText()函数深入详解

PHP的imageTtfText()函数深入详解

PHP的imageTtfText()函数深入详解

(6)$color 字体的颜色,不多解释。

(7)$fontfile 字体文件。也就是包含trueType字体字模的文件,如楷体字体文件simkai.ttf。这种文件的格式是有标准规范的,而且与平台无关。所以可以直接把Windows系统的字体文件拷贝到Linux下使用。

(8)$text 要渲染的字符串。需要注意必须是UTF-8编码的字符串。说到字符串不得不提PHP的string数据类型。虽然名为string,其实PHP语言本身并不认识各种字符编码,它只是简单的把string看做是动态增长的“字节”数组,例如strlen()就是返回的字节数。而我们知道除了ASCII编码的字符和字节是相同的外,几乎没有其他字符编码中的字符对应一个字节,例如一个汉字的UTF-8编码占用3个字节。至于怎么解释其中的字符编码,需要专门的库函数如iconv_strlen()。如果字符串使用字面量,那么其所在的php源文件就必须编码为UTF-8存储。

2 几个小技巧

(1)字处理软件的复杂之处

尽管这个函数可以显示字符串,但是针对于字处理软件(如Word)来说,并不能使用。因为一旦涉及到对其的问题,此函数即不能使用了。因为它不能处理字间距,当然也就无法实现分散对齐等功能。再加上每行的“避首尾”(如,不能位于行首)要求,做好字处理并不简单。

变通的方式是,首先通过复杂的公式计算出各个字符的准确位置,然后针对每一个字符调用此函数。

(2)如何显示加粗字体

对于本身就有粗体的字体文件来说,这不存在任何问题,只要使用粗体文件就可以了。问题是很多字体文件并没有针对粗体单独设计。GD库中也没有一个能加粗显示的函数。其解决方法说出来有点可笑,就是针对每个字符绘制两次,第二次绘制时的$x会第一次的$x多1个像素即可。

标签:
PHP的imageTtfText()函数,PHP绘制文字,PHP图片处理

免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
桃源资源网 Design By www.nqtax.com

评论“PHP的imageTtfText()函数深入详解”

暂无“PHP的imageTtfText()函数深入详解”评论...

RTX 5090要首发 性能要翻倍!三星展示GDDR7显存

三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。

首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。

据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。