留言板的标准特性之一是允许成员签名,这是附加到每个帖子的底部。 可以把任何他们想要到签名海报(在论坛设置)。 把报价放在一个签名是一个比较流行的事情要做。

很多人把一些座右铭他们住,一些有趣的引用一些名人等等。 有些人喜欢引用其他海报在黑板上说道。 我是其中的一个人。 我认为这是有趣的和促进社区的归属感。

我phpfreaks论坛的成员已经许多年了,这些年来,我已发布和遇到引用(不管怎样,对我来说,)值得收集。 但是有很多报价在一个团体并不是很方便。

所以有一天我有好点子从列表中选择一个随机的报价,只是显示。 大多数留言板(或网站一般来说,)不会让你随意发布脚本和解析它。 与安全或任何blahblahblah翻译:站点都是紧张的。

但是大多数网站将让你做的是,发布图片。 php的一件事是,它有一个叫做GD库,让您操作图像以各种各样的方式。 它甚至会让你的输出作为一个图像浏览器,所以你可以加载一个php文件,就好像它是一个实际的形象。

问题解决了! 我决定把我收集到一个数据库,并编写一个脚本,选择一个随机并创建一个图像,告诉浏览器的内容是一个图像和输出图像,简直是噩梦! 我要发布一个随机引用我的团体!

我为未来....

不久,我开始定期接收消息问我“这是什么魔法? ? 我该怎么做?” 你知道,我认为这是一种有趣的人应该问,因为这实在是没什么新鲜的。 记得在那一天人们那些愚蠢的团体图像显示“个人”信息?

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*你的IP xxx.xxx.xx。 xx *
*您的主机是blahblah *
*你的操作系统是windoze *
*你的鞋码是4 1/2英寸*
*你左手*“蝙蝠”
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

最重要的是,这是几乎相同的原理,验证码验证形式,现在已经存在多年,当然大家都知道这是什么,对吧? 然而,我在这里写一个教程,因为人们都在问,所以不管。

本教程不会细节如何引用(或文字)放入数据库或检索一个随机。 你可以学习所有关于基本数据库交互在我基本数据库交互教程。 相反,我要硬编码两个随机引用到一个数组中,随机选择一个。

此外,本教程不会告诉你如何做任何幻想,像波浪文本,镶褶边的边界,或者进入扭曲的方法用于验证码图片,等; 我们要做一个灰色背景你可以看到图像边界,和普通一般化的白色文本(对比灰色背景)。 我来告诉你如何开始。 你去哪里从有到你。

代码是这样- - - - - - - - - - - - - - - - - >

预先付款,

这是完整的脚本。 复制和粘贴。 运行它。 感到惊讶。 我的下一个技巧将四分之一的耳朵。

< ?php
/ /字体文件路径
美元的字体=“arial.ttf”;
美元字形大小=10;/ /随机引用的数组
美元报价=数组(“http://www.flingbits.com切片面包以来最伟大的发明! 除了你不能切……”,“你知道那个家伙的左侧被切断了? 他现在好了。”,“在草坪上有个招×××上药物re-hab中心说“请勿践踏草坪”。“,“警察被称为一个托儿所,一个三岁的抵制休息。”,”一个洞被发现裸体主义者阵营的墙。 警方正在调查。”,“当一个时钟饿了它可以追溯到4秒。”,“时间飞逝如箭。 果蝇喜欢香蕉。”,“澳大利亚:局域网局域网下。”,“酒精和微积分不混合饮料和推导。”);/ /生成一个随机数数组元素的范围的#
pos美元=兰德(0,数(美元报价)- - -1);/ /得到报价和自动换行
美元报价=自动换行(美元报价[pos美元),20.);/ /创建一个边界框的文本
美元会变暗=imagettfbbox(美元字形大小,0,美元的字体,美元报价);/ /做一些容易处理维度vars imagettfbbox的结果/ /因为位置不措施1,我们需要/ /做一些数学发现实际的宽度和高度
美元的宽度=美元会变暗[4]- - - - - -美元会变暗[6];/ /右上角x -左上角x
美元的高度=美元会变暗[3]- - - - - -美元会变暗[5];/ /右下y y -右上角/ /创建图像
美元图片=imagecreatetruecolor(美元的宽度,美元的高度);/ /选择背景颜色
美元的背景=imagecolorallocate(美元图片,One hundred.,One hundred.,One hundred.);/ /选择文本颜色
fontcolor美元=imagecolorallocate(美元图片,255年,255年,255年);/ /背景色填充背景
imagefilledrectangle(美元图片,0,0,美元的宽度,美元的高度,美元的背景);/ / x,y坐标值为imagettftext定义了文本的基线:左下角/ /所以x coord可以保持0但是你必须添加字体大小y来模拟/ /左上角边界内我们可以编写文本图像的边界
$ x=0; 
$ y=美元字形大小;
imagettftext(美元图片,美元字形大小,0,$ x,$ y,fontcolor美元,美元的字体,美元报价);/ /告诉浏览器是一个图像的内容
头(“内容类型:图像/ png”);/ /输出图像到浏览器
imagepng(美元图片);/ /删除图像资源
imagedestroy(美元图片);? >

并应用它,您将使用一个标准的img标记(或img bbcode论坛),指向文件作为源,像这样:

<imgsrc=“http://www.yoursite.com/yourscript.php”/ >

嘿… 你说的大小并不重要!

/ /字体文件路径
美元的字体=“arial.ttf”;
美元字形大小=10;

首先,我们将决定使用什么样的字体和字体大小。 你怎么这样做会有所不同从设置到设置。 你可能需要包括路径/ / fontfile字体服务器可能有也可能没有安装(大多数主机有很多字体预装在某些路径或其他)。 由你来找出这个文件在哪里,如果你使用的字体安装。

如果你想跳过所有,就目前而言,最简单的麻烦免费的事情是上传你的字体到相同的目录作为您的脚本,该脚本将开始通过寻找。 你必须做你的主机没有任何字体,无论如何,所以不妨开门见山。

我选择了普通arial字体,字体大小为10,以英寸…呃……像素。

. . 和第二randumb号码是……

/ /随机引用的数组
美元报价=数组(“http://www.flingbits.com切片面包以来最伟大的发明! 除了你不能切……”,“你知道那个家伙的左侧被切断了? 他现在好了。”,“在草坪上有个招×××上药物re-hab中心说“请勿践踏草坪”。“,“警察被称为一个托儿所,一个三岁的抵制休息。”,”一个洞被发现裸体主义者阵营的墙。 警方正在调查。”,“当一个时钟饿了它可以追溯到4秒。”,“时间飞逝如箭。 果蝇喜欢香蕉。”,“澳大利亚:局域网局域网下。”,“酒精和微积分不混合饮料和推导。”);

美元报价是我们随机引用的数组。 每个位置的数组是一个包含引用的字符串值,对我个人的意义。 好了没有。 但是我喜欢双关语。 谁不?

/ /生成一个随机数数组元素的范围的#
pos美元=兰德(0,数(美元报价)- - -1);

我们需要选择一个随机引用的引用列表。 为此,我们可以找出有多少元素$引用数组,并选择一个随机数字0到- 1。 默认情况下,数组的位置从0开始,所以如果有(在本例中)八个引号,数组键将编号从0到7。

自count($引号)返回8,因为有8个报价,我们需要减去1,所以我们选择一个随机数字0到7。

/ /得到报价和自动换行
美元报价=自动换行(美元报价[pos美元),20.);

然后我们把数量和分配报价(pos)美元美元报价。 例如,如果pos分配5美元,美元报价将被分配:

“时间飞逝如箭。 果蝇喜欢香蕉。”

自动换行的事情是什么? 自动换行()这个脚本并不是必需的。 你可以删除它,都将在一行的文本。 包括我在这里的原因是因为我知道总会有人问如何打破了文本不会让一个长期的形象,所以我先发制人。 我学会了通过观察我的总统。

自动换行()接受多个参数。 只有前两个是必需的,和方便,这就是我们需要在这种情况下,这是所有使用的。 第一个参数是字符串我们想分手,和第二参数是多少字符之前我们想要的新行。

自动换行()在默认情况下不会让一个新行中间的一个字。 如果字符长度到达截止,我们中间的字,整个词是下一行。 可以迫使自动换行()在完全剪掉截点无论如何,通过设置可选的四参数为true。

此外,默认情况下,自动换行() “优惠”字符串到新行插入一个“\ n”后截止点。 您可以指定实际插入到这些点的可选的第三个参数。 有各种各样的疯狂的事情您可以使用自动换行()对于涉及利用能够指定插入的截止点,但那是另一个话题的讨论。

一刀切……?

/ /创建我们的边界框的文本
美元会变暗=imagettfbbox(美元字形大小,0,美元的字体,美元报价);

为了创建一个图像,我们需要创建一个图像资源。 为了做到这一点,我们需要告诉php多大的我们想要的图像。 对于本教程,我们想要的图像相同大小我们刚刚创建的文本块。 GD库提供了一种方便的方法来找出我们的文本块的“边界”:imagettfbbox()。

imagettfbbox()计算文本的界限,使一群怪异的和古老的计算基于文本的字体大小,文本的角度(比如,如果我们想要文本倾斜坡,而不是水平,作为文本通常是读),字体本身,和文本的问题。 我认为它的眼球,但是它似乎工作,所以我不抱怨。

/ /做一些容易处理维度vars imagettfbbox的结果/ /因为位置不措施1,我们需要/ /做一些数学发现实际的宽度和高度
美元的宽度=美元会变暗[4]- - - - - -美元会变暗[6];/ /右上角x -左上角x
美元的高度=美元会变暗[3]- - - - - -美元会变暗[5];/ /右下y y -右上角

不幸的是,imagettfbbox()不只是告诉你“嘿,这是宽度和高度,“所以我们需要弄清楚我们自己的。 imagettfbbox()返回一个数组不同的数字。 8数字,确切地说。 每一个代表一个x,y坐标的角落文本“边界”。 您可以参考手册坐标数组元素的引用。 我在这里说我使用的。

理想情况下,所有我们应该需要的是左下角,但因为某些原因不能工作。 降低边界回来为0或1,上边界回来几个像素短; 谁知道这是为什么。 谁在乎(我敢肯定有人,我相信他们最终会发布评论,这个人,我说谢谢你清理了! < coughnerdcoughcough >)。

幸运的是,我们仍然可以使用这些数据。 我们只需要减去一个左x从对x,和一个从底部y。我们将在易于使用的分配结果变量的宽度和高度,美元,我们好了。

一张图片胜过一千个单词……

/ /创建图像
美元图片=imagecreatetruecolor(美元的宽度,美元的高度);

现在我们需要创建一个图像资源。 基本上就像一个画布:画图片,可以这么说。 认为它是打开你最喜欢的绘画程序,告诉它你想要创建一个新的x,y的大小。 你开始,画简笔画,最终将它保存到一个文件中。 嗯,图像资源基本上是你的杰作,在你保存它; 电脑的内存混乱在每次你做出改变。

imagecreatetruecolor基本上告诉php,我们希望与一个画布x宽度和高度大。 我们使用文本的宽度和高度边界之前我们算出了。

/ /选择背景颜色
美元的背景=imagecolorallocate(美元图片,One hundred.,One hundred.,One hundred.);/ /选择文本颜色
fontcolor美元=imagecolorallocate(美元图片,255年,255年,255年);

接下来我们要做的是选择我们想使用什么颜色。 这就像当你在你的油漆程序,和你选择你想要的颜色。 你还没有真正使用它,你就选择它。 这就是我们正在做的,除了我们存储在变量选择。 我们想要一种颜色对我们的背景,和一个对我们的字体颜色。

第一个参数为imagecolorallocate是我们刚刚创建的图像资源。 接下来的3参数是红,绿,蓝(rgb)值的颜色,指定为一个0到255的整数(每个人)。 0,0,0表示没有颜色的强度,这是一个黑色的花俏的说法。 255255255是全彩色的强度,或白色。 100100100年是我选择一些随机强度水平; 甚至一个混合的三种颜色(灰色)。

保持住这个姿势!

/ /背景色填充背景
imagefilledrectangle(美元图片,0,0,美元的宽度,美元的高度,美元的背景);

现在我们开始谈生意,开始画这幅画,可以这么说。 首先,我们设置图像的背景颜色。 我们通过一个填充矩形,因为我们的形象是一个矩形,填充矩形大小相同的长方形很方便我们的目的。

imagefilledrectangle()需要6个参数:图像资源,左上角x,y坐标,右下角x,y坐标,填充颜色。 我们用适当的变量,填空和前进。

/ / x,y坐标值为imagettftext定义了文本的基线:左下角/ /所以x coord可以保持0但是你必须添加字体大小y来模拟/ /左上角边界内我们可以编写文本图像的边界
$ x=0; 
$ y=美元字形大小;
imagettftext(美元图片,美元字形大小,0,$ x,$ y,fontcolor美元,美元的字体,美元报价);

接下来我们要做的是写文本到画布上。 我们这样做值与imagettftext()。 这个GD函数需要8参数:

1——图像资源
2 -文本的字体大小
3 -我们想要的角度编写的文本(如,如果我们想要倾斜,而不是正常的水平。 一样的imagettfbbox()早些时候)
4、5 - x,y坐标原点的文本。 这个坐标指定左下角第一个字符的文本。
6 -字体的颜色
7 -字体类型
8 -文本“漆”

自第四和第五参数值的imagettftext()指定较低的留下的文字,我们需要抵消的起点,所以边界内的文本是写我们的画布。 x坐标不需要抵消,所以呆在0,但y坐标需要抵消字体的大小。

签名,盖章并发表

/ /告诉浏览器是一个图像的内容
头(“内容类型:图像/ png”);/ /输出图像到浏览器
imagepng(美元图片);/ /删除图像资源
imagedestroy(美元图片);

好了,我们现在的图像创建! 现在我们要做的就是输出结果。 首先,我们向浏览器发送一个头,告诉它的内容是一个图像。 我选择了png图像类型的地狱。 您可以指定它作为一个gif或bmp,jpg之类的; GD库支持输出到不同的文件。 你必须改变content - type头电话,以及适当的GD函数(如imagegif imagejpeg等. .)。

然后我们输出图像与imagepng()。 惟一需要的参数是图像资源。 如果这是我们指定的唯一参数,输出它作为我们的浏览器的原始图像(这就是为什么我们发送头到浏览器)。 其他参数可用于保存文件,质量等。 你可以参考人工输入的其他参数和如何使用它们。

我们所做的最后一件事是删除图像资源imagedestroy(),所以它不是挂在计算机的内存了。 这不是必要,一切都毁了,内存释放,等。 blahblahblah当脚本执行完成的,但它是良好的编程实践收拾自己。 毕竟,你擦你的屁股当你完成# 2,不是吗? 你不? ? ?

结束!