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技术开发技巧分享
Mar 23 PHP
php中DOMElement操作xml文档实例演示
Mar 26 PHP
PHP使用递归方式列出当前目录下所有文件的方法
Jun 02 PHP
php实现微信公众平台账号自定义菜单类
Oct 11 PHP
php版微信开发之接收消息,自动判断及回复相应消息的方法
Sep 23 PHP
关于Laravel Route重定向的一个注意点
Jan 16 PHP
PHP实现的下载远程文件类定义与用法示例
Jul 05 PHP
PHP 断点续传实例详解
Nov 11 PHP
PHP CURL与java http使用方法详解
Jan 26 PHP
阿里云的WindowsServer2016上部署php+apache
Jul 17 PHP
使用composer命令加载vendor中的第三方类库 的方法
Jul 09 PHP
laravel框架模型、视图与控制器简单操作示例
Oct 10 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 5.0对象模型深度探索之绑定
2006/09/05 PHP
用PHP实现读取和编写XML DOM代码
2010/04/07 PHP
php下使用strpos需要注意 === 运算符
2010/07/17 PHP
php文件缓存类汇总
2014/11/21 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
2017/09/22 PHP
PHP连续签到功能实现方法详解
2019/12/04 PHP
jQuery EasyUI API 中文文档 - Form表单
2011/10/06 Javascript
js弹出的对话窗口永远保持居中显示
2012/12/15 Javascript
基于jquery的网站幻灯片切换效果焦点图代码
2013/09/15 Javascript
JS、DOM和JQuery之间的关系示例分析
2014/04/09 Javascript
BootStrap实现带有增删改查功能的表格(DEMO详解)
2016/10/26 Javascript
angular ng-repeat数组中的数组实例
2017/02/18 Javascript
Layui table 组件的使用之初始化加载数据、数据刷新表格、传参数
2017/09/11 Javascript
解决JQuery全选/反选第二次失效的问题
2017/10/11 jQuery
Angular4 Select选择改变事件的方法
2018/10/09 Javascript
Vue实现点击按钮复制文本内容的例子
2019/11/09 Javascript
vue 监听 Treeselect 选择项的改变操作
2020/08/31 Javascript
vue 在服务器端直接修改请求的接口地址
2020/12/19 Vue.js
mapboxgl实现带箭头轨迹线的代码
2021/01/04 Javascript
如何在 Vue 中使用 JSX
2021/02/14 Vue.js
[48:26]VGJ.S vs infamous Supermajor 败者组 BO3 第二场 6.4
2018/06/05 DOTA
python 自动提交和抓取网页
2009/07/13 Python
python基础教程之五种数据类型详解
2017/01/12 Python
在python里从协程返回一个值的示例
2019/02/19 Python
python实现把二维列表变为一维列表的方法分析
2019/10/08 Python
如何将 awk 脚本移植到 Python
2019/12/09 Python
python通过对字典的排序,对json字段进行排序的实例
2020/02/27 Python
CSS3的resize属性使用初探
2015/09/27 HTML / CSS
CSS3绘制超炫的上下起伏波动进度加载动画
2016/04/21 HTML / CSS
Calzedonia美国官网:意大利风格袜子、打底裤和沙滩装
2018/07/19 全球购物
java程序员面试交流
2012/11/29 面试题
厂长助理岗位职责
2013/12/27 职场文书
小学生防溺水广播稿
2014/01/12 职场文书
火锅店营销方案
2014/02/26 职场文书
2014年小学美术工作总结
2014/12/20 职场文书
迎新晚会主持词开场白
2015/05/28 职场文书