用PHP产生动态的影像图


Posted in PHP onOctober 09, 2006

很多人不了解  PHP 可以产生非HTML的资料.这是对产生影像图非常有用的.可以从 database 产生一个简单的广告横图或更简单只产生一个图形按钮 .

我用 TTF 字型在以下的范例中  
我通常取名作 'button.php3':

#######################################################
-----button.php3------
<?
  Header("Content-type: image/gif");
  if(!isset($s)) $s=11;
  $size = imagettfbbox($s,0,"fonts/TIMES.TTF",$text);
  $dx = abs($size[2]-$size[0]);
  $dy = abs($size[5]-$size[3]);
  $xpad=9;
  $ypad=9;
  $im = imagecreate($dx+$xpad,$dy+$ypad);
  $blue = ImageColorAllocate($im, 0x2c,0x6D,0xAF);
  $black = ImageColorAllocate($im, 0,0,0);
  $white = ImageColorAllocate($im, 255,255,255);
  ImageRectangle($im,0,0,$dx+$xpad-1,$dy+$ypad-1,$black);
  ImageRectangle($im,0,0,$dx+$xpad,$dy+$ypad,$white);
  ImageTTFText($im, $s, 0, (int)($xpad/2)+1, $dy+(int)($ypad/2), $black, "fonts/TIMES.TTF", $text);
  ImageTTFText($im, $s, 0, (int)($xpad/2), $dy+(int)($ypad/2)-1, $white, "fonts/TIMES.TTF", $text);
  ImageGif($im);
  ImageDestroy($im);
?>
#######################################################
很重要一点是你不能在这档案中放任何HTML tags.也不能有空白行在 <?和 ?> tag 之前或之後. 如果你用这段Script後看到一个不完整的影像, 表示你可能在PHP标签以外误打了字元.

以上的 script 可以由此语法在网页中叫出来: <IMG SRC="button.php3?s=36&text=PHP+is+Cool">  

#######################################################
----test.php-----  

<html>
<head>
<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=gb2312">
<title>New Page 1</title>
</head>

<body>  

<IMG SRC="button.php3?s=36&text=PHP+is+Cool">  

</body>
</html>
#######################################################  

test.php结果会像这样: .

's' 参数是设定字型大小 .  

这是当 s=18 时:  

注I:
字型路径 "/fonts/TIMES.TTF" 可由windows/fonts目录下取得 TIMS.TTF 字型档 Copy 至你网站的目录 fonts下即可测试 至於中文的表现 尚待各位网友提供心得  

注意 我先画了一个黑色方块区再用白色位移产生 3D 效果.也陬L法在浅色背景中看出来 但你可以把背景色改为深色看看此效果. 字型也做了同样效果表现立体感.  

你要先确定你的安装 PHP 时有设定支援  GD 和 TTF. 可参考  PHP FAQ . 我建议可以 copy libgd.a 到  /usr/local/lib 和 gd*.h 相关档案到  /usr/local/include 然後   
'make install' for FreeTTF library.  

可以在这http://rover.wiesbaden.netsurf.de/~kikita/ 找到钗httf 字型哦!

注:

以下的原始码改进了上面的弁?可多行文字显示:
#######################################################
--------------button.php-----------------
<?

Header("Content-type: image/jpeg");
if(!isset($bgred)) $bgred=0;
if(!isset($bggreen)) $bggreen=51;
if(!isset($bgblue)) $bgblue=153;
if(!isset($chred)) $chred=255;
if(!isset($chgreen)) $chgreen=255;
if(!isset($chblue)) $chblue=255;
if(!isset($shadow)) $shadow="yes";
if(!isset($wrappos)) $wrappos=20;
if(!isset($crop)) $crop=2.2;
if(!isset($jpegquality)) $jpegquality=80;
if(!isset($s)) $s=11;
$savetext=$text;
$text=wordwrap($text,$wrappos," ",0);
if (!isset($font)) $fontname="/www/ttfonts/arialbd.ttf";
else
$fontname="/www/ttfonts/".$font.".ttf";
$size = imagettfbbox($s,0,$fontname,$text);
$dx = abs($size[2]-$size[0]);
$dy = abs($size[5]-$size[3]);
$upper=abs($size[5]);
$under=$size[1];
$th=$upper-$under;
$xpad=9;
if (substr_count($text,chr(13))>=1)
{
  $mult=(substr_count($text,chr(13)));
  $ypad=($mult*$crop*$s)+$s;
}
else $ypad=($crop-2)*$s;
$im = imagecreate($dx+$xpad,$th+$ypad);
$color = ImageColorAllocate($im, $bgred,$bggreen,$bgblue);
$black = ImageColorAllocate($im, 0,0,0);
$fontcolor = ImageColorAllocate($im, $chred,$chgreen,$chblue);
ImageRectangle($im,0,0,$dx+$xpad-1,$th+$ypad-1,$black);
ImageRectangle($im,0,0,$dx+$xpad,$th+$ypad,$white);
if ($shadow=="yes")
ImageTTFText($im, $s, 0, (int)($xpad/2)-2+1, $th+2+(int)($ypad/2)-3, $black, $fontname, $text);
ImageTTFText($im, $s, 0, (int)($xpad/2)-2, $th+2+(int)($ypad/2)-1-3, $fontcolor, $fontname, $text);
Imagejpeg($im,"",$jpegquality);
ImageDestroy($im);

?>
#######################################################
这可以下面这个 form 来产生:
#######################################################
----------test.php--------------------
<html>

<head>
<title>New Page 1</title>
</head>

<body>

<form method="POST" action="button.php">
<p>文字<input type="text" name="text" size="60"></p>
<p>大小<input type="text" name="s" size="6" value="14"></p>
<p>断句的位置(wrap break position) <input type="text" name="wrappos" size="3" value="20"></p>
<p>背景颜色</p>
<p>红色<input type="text" name="bgred" size="6" value="0">     
     绿色<input type="text" name="bggreen" size="8" value="51">     
      蓝色<input type="text" name="bgblue" size="7" value="153"></p>
<p>字元颜色</p>
<p>红色 <input type="text" name="chred" size="6" value="255">   
      绿色 <input type="text" name="chgreen" size="8" value="255">     
     蓝色 <input type="text" name="chblue" size="7" value="255"></p>
<p>字型 <input type="text" name="font" size="20" value="arialbd"></p>
<p>阴影 <input type="radio" value="yes" checked name="shadow">是  
               <input type="radio" name="shadow" value="no">否</p>
<p>Crop size <input type="text" name="crop" size="20" value="2.2"></p>
<p>Jpeg 品质 (0-100) <input type="text" name="jpegquality" size="20" value="80"></p>
<p><input type="submit" value="Submit" name="B1">
      <input type="reset" value="Reset" name="B2"></p>
</form>
</body>
</html>
#######################################################

或是直接像上例一样呼叫:  

#######################################################
----test.php-----  

<html>
<head>
<title>New Page 1</title>
</head>

<body>  

<IMG SRC="button.php?s=36&text=PHP+is+Cool">  

</body>
</html> 

PHP 相关文章推荐
BBS(php &amp; mysql)完整版(五)
Oct 09 PHP
PHP 5.3 下载时 VC9、VC6、Thread Safe、Non Thread Safe的区别分析
Mar 28 PHP
需要注意的几个PHP漏洞小结
Feb 05 PHP
利用php+mcDropdown实现文件路径可在下拉框选择
Aug 07 PHP
PHP图片自动裁切应付不同尺寸的显示
Oct 16 PHP
PHP使用ODBC连接数据库的方法
Jul 18 PHP
PHP生成树的方法
Jul 28 PHP
CI框架常用函数封装实例
Nov 21 PHP
PHP获取数组中单列值的方法
Jun 10 PHP
PHP设计模式之适配器模式原理与用法分析
Apr 25 PHP
关于Laravel参数验证的一些疑与惑
Nov 19 PHP
如何在PHP环境中使用ProtoBuf数据格式
Jun 19 PHP
在Windows版的PHP中使用ADO
Oct 09 #PHP
PHP4与PHP3中一个不兼容问题的解决方法
Oct 09 #PHP
PHP 高手之路(一)
Oct 09 #PHP
PHP 高手之路(二)
Oct 09 #PHP
PHP 高手之路(三)
Oct 09 #PHP
php&amp;java(二)
Oct 09 #PHP
php&amp;java(一)
Oct 09 #PHP
You might like
乐信RP2100的电路分析和打磨
2021/03/02 无线电
德劲1102收音机的打理维修案例
2021/03/02 无线电
php加水印的代码(支持半透明透明打水印,支持png透明背景)
2013/01/17 PHP
浅谈web上存漏洞及原理分析、防范方法(文件名检测漏洞)
2013/06/29 PHP
1亿条数据如何分表100张到Mysql数据库中(PHP)
2015/07/29 PHP
两种php实现图片上传的方法
2016/01/22 PHP
php把字符串指定字符分割成数组的方法
2018/03/12 PHP
PHP PDOStatement::execute讲解
2019/01/31 PHP
PHP微信发送推送消息乱码的解决方法
2019/02/28 PHP
javascript支持firefox,ie7页面布局拖拽效果代码
2007/12/20 Javascript
js单例模式详解实例
2013/11/21 Javascript
JavaScript中的分号插入机制详细介绍
2015/02/11 Javascript
js实现一个链接打开两个链接地址的方法
2015/05/12 Javascript
AngularJS的ng-repeat指令与scope继承关系实例详解
2017/01/21 Javascript
vue实现图片上传到后台
2020/06/29 Javascript
js实现双色球效果
2020/08/02 Javascript
python 实现插入排序算法
2012/06/05 Python
利用python如何处理nc数据详解
2018/05/23 Python
python遍历文件夹找出文件夹后缀为py的文件方法
2018/10/21 Python
Python无头爬虫下载文件的实现
2020/04/02 Python
Keras中的多分类损失函数用法categorical_crossentropy
2020/06/11 Python
python Matplotlib模块的使用
2020/09/16 Python
通过实例解析python subprocess模块原理及用法
2020/10/10 Python
编写html5时调试发现脚本php等网页js、css等失效
2013/12/31 HTML / CSS
技校毕业生的自我评价
2013/12/27 职场文书
大学英语演讲稿(中英文对照)
2014/01/14 职场文书
留学推荐信写作指南
2014/01/25 职场文书
学习十八大报告感言
2014/02/28 职场文书
五一口号
2014/06/19 职场文书
教师正风肃纪剖析材料
2014/10/20 职场文书
交警失职检讨书
2015/01/26 职场文书
新娘父亲婚礼致辞
2015/07/27 职场文书
Angular CLI发布路径的配置项浅析
2021/03/29 Javascript
PHP新手指南
2021/04/01 PHP
总结一下关于在Java8中使用stream流踩过的一些坑
2021/06/24 Java/Android
Android开发 使用文件储存的方式保存QQ密码
2022/04/24 Java/Android