PHP中创建图像并绘制文字的例子


Posted in PHP onNovember 19, 2014

在图像中显示的文字也需要按坐标位置画上去。在PHP中不仅支持比较多的字体库,而且提供了非常灵活的文字绘制方法。例如,在图中绘制缩放、倾斜、旋转的文字等。可以使用imageString()、imageStringUP()或imageChar()等函数使用的字体文字绘制到图像中。这些函数的原型如下所示:

bool imagestring(resource $image,int $font,int $x ,int $y,string $s,int $color)              //水平地画一行字符串

bool imagestringup(resource $image,int $font,int $x ,int $y,string $s,int $color)                 //垂直地画一行字符串

bool imagechar(resource $image,int $font,int $x ,int $y,char $c,int $color)                //水平地画一个字符

bool imagecharup(resource $image,int $font,int $x ,int $y,char $c,int $color)                 //垂直地画一个字符

在上面列出来的四个函数中,前两个函数imageString()和imageStringUP()分别用来向图像中水平和垂直输出一行字符串,而后两个函数imageChar()和imageCharUP()分别用来向图像中水平和垂直输出一个字符。虽然这四个函数有所差异,但调用方式类似。它们都是在$image图像中绘制由第五个参数指定的字符,绘制的位置都是从坐标($x,$y)开始输出。如果是水平地面画一行字符串则是从左向右输出,而垂直地画一行字符串则是从下而上输出。这些函数都可以通过最后一个参数$color给出文字的颜色。第二个参数$font则给出了文字字体标识符,其值为整数1、2、3、4或5,则是使用内置的字体,数字越大则输出的文字尺寸就越大。下面是在一个图像中输出文字的示例:

<?php 

$im = imagecreate(150, 150);

 

$bg = imagecolorallocate($im, 255, 255, 255); //设置画布的背景为白色

$black = imagecolorallocate($im, 0, 0, 0); //设置一个颜色变量为黑色

 

$string = "LAMPBrother"; //在图像中输出的字符

 

imagestring($im, 3, 28, 70, $string, $black); //水平的将字符串输出到图像中

imagestringup($im, 3, 59, 115, $string, $black); //垂直由下而上输到图像中

for($i=0,$j=strlen($string);$i<strlen($string);$i++,$j--){ //循环单个字符输出到图像中

imagechar($im, 3, 10*($i+1),10*($j+2),$string[$i],$black); //向下倾斜输出每个字符

imagecharup($im, 3, 10*($i+1),10*($j+2),$string[$i],$black); //向上倾斜输出每个字符

}

 

header('Content-type:image/png'); 

imagepng($im);

?>

PHP中创建图像并绘制文字的例子

通过上面介绍的四个函数输出内置的字体外,还可以使用imageTtfText()函数,输出一种可以缩放的与设备无关的TrueType字体。TrueType是用数学函数描述字体轮廓外形,即可以用做打印字体,又可以用作屏幕显示,各种操作系统都可以兼容这种字体。由于它是由指令对字形进行描述,因此它与分辨率无关,输出时总是按照打印机的分辨率输出。无论放大或是缩小,字体总是光滑的,不会有锯齿出现。例如在Windows系统中,字体库所在的文件夹C:\WINDOWS\Fonts下,对TrueType字体都有标注,如simsun.ttf为TrueType字体中的“宋体”。imageTtfText()函数的原型如下所示:

array imagettftext(resource $image,float $size ,float $angle,int $x,int $y,int $color ,string $fontfile,string $text)

该函数需要多个参数,其中参数$image需要提供一个图像资源。参数$size用来设置字体大小,根据GD库版本不同,应该以像素大小指定(GD1)或点大小(GD2)。参数$angle是角度制表示的角度,0º为从左向右读的文本,更高数值表示逆时针旋转。例如90º表示从下向上读的文本。并由($x,$y)两个参数所表示的坐标,定义了一个字符的基本点,大概是字符的左下角。而这和imagestring()函数有所不同,其($x,$y)坐标定义了第一个字符的左上角。参数$color指定颜色索引。使用负的颜色索引值具有关闭防锯齿的效果。参见$fontfile是想要使用的TrueType字体的路径。根据PHP所使用的GD库的不同,当fontfil没有以“/”开头时则“.ttf”将被加到文件名之后,并且会在库定义字体路径中尝试搜索该文件名。最后一个参数$text指定需要输出的文本字符串,可以包含十进制数字化字符表示(形式为:€)来访问字体中超过位置127的字符。UTF-8编码的字符串可以直接传递。如果字符串中使用的某个字符不被字体支持,一个空心矩形将替换该字符。

imagettftext()函数返回一个含有8个单元的数组,表示了文本外框的四个角,顺序为左下角,右下角,右上角,左上角。这些点是相对于文本的而和角度无关,因此“左上角”指的是以水瓶方向看文字时其左上角。我们通过在下例中的脚本,生成一个白色的400X30像素的PNG图片,其中有黑色(带灰色阴影)“宋体”字体写的“回忆经典!”代码如下所示:

<?php

$im = imagecreatetruecolor(400, 30);            //创建400 30像素大小的画布

 

$white = imagecolorallocate($im, 255, 255, 255);

$grey = imagecolorallocate($im, 128, 128, 128);

$black = imagecolorallocate($im, 0, 0, 0);

 

imagefilledrectangle($im, 0, 0, 399, 29, $white);       //输出一个使用白色填充的矩形作为背景

 

//如果有中文输出,需要将其转码,转换为UTF-8的字符串才可以直接传递

$text = iconv("GB2312", "UTF-8", "回忆经典");

 

//设定字体,将系统中与simsun.ttc对应的字体复制到当前目录下

$font = 'simsun.ttc';

 

imagettftext($im, 20, 0, 12, 21, $grey, $font, $text);      //输出一个灰色的字符串作为阴影

imagettftext($im, 20, 0, 10, 20, $black, $font, $text);         //在阴影上输出一个黑色的字符串

 

header("Content-type: image/png");

imagepng($im);

 

imagedestroy($im);

 

?>
PHP 相关文章推荐
PHP小程序自动提交到自助友情连接
Nov 24 PHP
抓取并下载CSS中所有图片文件的php代码
Sep 26 PHP
php获取服务器信息的实现代码
Feb 04 PHP
PHP+iFrame实现页面无需刷新的异步文件上传
Sep 16 PHP
PHP中shuffle数组值随便排序函数用法
Nov 21 PHP
PHP实现批量生成App各种尺寸Logo
Mar 19 PHP
php生成验证码函数
Oct 20 PHP
Yii2中OAuth扩展及QQ互联登录实现方法
May 16 PHP
PHP快速排序quicksort实例详解
Sep 28 PHP
php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法
Oct 12 PHP
Json_decode 解析json字符串为NULL的解决方法(必看)
Feb 17 PHP
php中html_entity_decode实现HTML实体转义
Jun 13 PHP
PHP图片处理之图片背景、画布操作
Nov 19 #PHP
php使用function_exists判断函数可用的方法
Nov 19 #PHP
PHP图片处理之使用imagecopyresampled函数实现图片缩放例子
Nov 19 #PHP
PHP判断一个gif图片是否为动态图片的方法
Nov 19 #PHP
PHP图片处理之使用imagecopyresampled函数裁剪图片例子
Nov 19 #PHP
PHP图片处理之使用imagecopy函数添加图片水印实例
Nov 19 #PHP
php图片处理函数获取类型及扩展名实例
Nov 19 #PHP
You might like
php下使用SMTP发邮件的代码
2008/01/10 PHP
PHP合并discuz用户脚本的方法
2015/08/04 PHP
盘点PHP和ASP.NET的10大对比!
2015/12/24 PHP
ThinkPHP中where()使用方法详解
2016/04/19 PHP
根据对象的某一属性进行排序的js代码(如:name,age)
2010/08/10 Javascript
jquery学习笔记 用jquery实现无刷新登录
2011/08/08 Javascript
从数据结构分析看:用for each...in 比 for...in 要快些
2013/04/17 Javascript
JavaScript获取按钮所在form表单id的方法
2015/04/02 Javascript
js实现头像图片切割缩放及无刷新上传图片的方法
2015/07/17 Javascript
jQuery Ajax页面局部加载方法汇总
2016/06/02 Javascript
jQuery的层级查找方式分析
2016/06/16 Javascript
javascript 显示全局变量与隐式全局变量的区别
2017/02/09 Javascript
vue+element-ui动态生成多级表头的方法
2018/08/28 Javascript
AjaxFileUpload.js实现异步上传文件功能
2019/04/19 Javascript
解决layui富文本编辑器图片上传无法回显的问题
2019/09/18 Javascript
js轮播图之旋转木马效果
2020/10/13 Javascript
原生js实现弹幕效果
2020/11/29 Javascript
[01:23:45]DOTA2-DPC中国联赛 正赛 CDEC vs Dragon BO3 第一场 1月22日
2021/03/11 DOTA
使用Python对IP进行转换的一些操作技巧小结
2015/11/09 Python
Python基于回溯法子集树模板解决全排列问题示例
2017/09/07 Python
python中多层嵌套列表的拆分方法
2018/07/02 Python
python Selenium实现付费音乐批量下载的实现方法
2019/01/24 Python
python求一个字符串的所有排列的实现方法
2020/02/04 Python
TensorFlow Saver:保存和读取模型参数.ckpt实例
2020/02/10 Python
django中的数据库迁移的实现
2020/03/16 Python
html5使用Canvas绘图的使用方法
2017/11/21 HTML / CSS
天猫超市:阿里巴巴打造的网上超市
2016/11/02 全球购物
日本快乐生活方式购物网站:Shop Japan
2018/07/17 全球购物
Saks Fifth Avenue澳洲/亚太地区:萨克斯第五大道精品百货店
2019/06/09 全球购物
视光学专业毕业生推荐信
2013/10/28 职场文书
高三政治教学反思
2014/02/06 职场文书
节能标语大全
2014/06/21 职场文书
教师群众路线学习心得体会
2014/11/04 职场文书
幼师自荐信范文
2015/03/06 职场文书
2015年度优秀员工推荐信
2015/03/23 职场文书
2015公司年度工作总结
2015/05/14 职场文书