用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 相关文章推荐
从零开始 教你如何搭建Discuz!4.1论坛
Jul 07 PHP
PHP 服务器配置(使用Apache及IIS两种方法)
Jun 01 PHP
Wordpress php 分页代码
Oct 21 PHP
PHP里的单例类写法实例
Jun 25 PHP
PHP判断是否连接上网络的方法
Jul 01 PHP
PHP微信红包API接口
Dec 05 PHP
PHP加密3DES报错 Call to undefined function: mcrypt_module_open() 如何解决
Apr 17 PHP
PHP单例模式定义与使用实例详解
Feb 06 PHP
PHP基于IMAP收取邮件的方法示例
Aug 07 PHP
PHP中PCRE正则解析代码详解
Apr 26 PHP
tp5(thinkPHP5框架)时间查询操作实例分析
May 29 PHP
阿里对象存储OSS在laravel框架中的使用方法
Oct 13 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
用PHP实现小型站点广告管理(修正版)
2006/10/09 PHP
一个数据采集类
2007/02/14 PHP
php XPath对XML文件查找及修改实现代码
2011/07/27 PHP
php计算程序运行时间的简单例子分享
2014/05/10 PHP
php通过array_unshift函数添加多个变量到数组前端的方法
2015/03/18 PHP
CentOS下PHP7的编译安装及MySQL的支持和一些常见问题的解决办法
2015/12/17 PHP
PHP实现通过URL提取根域名
2016/03/31 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
2017/07/21 PHP
TP3.2批量上传文件或图片 同名冲突问题的解决方法
2017/08/01 PHP
TP5框架实现的数据库备份功能示例
2020/04/05 PHP
输入自动提示搜索提示功能的使用说明:sugggestion.txt
2013/09/02 Javascript
javascript和jquery修改a标签的href属性
2013/12/16 Javascript
jQuery trigger()方法用法介绍
2015/01/13 Javascript
实现placeholder效果的方案汇总
2015/06/11 Javascript
JavaScript中的时间处理小结
2016/02/24 Javascript
bootstrap读书笔记之CSS组件(上)
2016/10/17 Javascript
深入理解jquery的$.extend()、$.fn和$.fn.extend()
2017/07/08 jQuery
Node.js自定义实现文件路由功能
2017/09/22 Javascript
Angular5.1新功能分享
2017/12/21 Javascript
关于vue的语法规则检测报错问题的解决
2018/05/21 Javascript
node.js +mongdb实现登录功能
2020/06/18 Javascript
vue实现一个6个输入框的验证码输入组件功能的实例代码
2020/06/29 Javascript
[56:17]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第三场 8.22
2019/09/05 DOTA
Python程序设计入门(5)类的使用简介
2014/06/16 Python
python求pi的方法
2014/10/08 Python
Python中在脚本中引用其他文件函数的实现方法
2016/06/23 Python
Pycharm以root权限运行脚本的方法
2019/01/19 Python
python实现从本地摄像头和网络摄像头截取图片功能
2019/07/11 Python
使用Python给头像戴上圣诞帽的图像操作过程解析
2019/09/20 Python
浅谈Python中的模块
2020/06/10 Python
Python代码覆盖率统计工具coverage.py用法详解
2020/11/25 Python
HTML5的postMessage的使用手册
2018/12/19 HTML / CSS
历史学专业个人的自我评价
2013/10/13 职场文书
优秀教师先进事迹
2014/01/22 职场文书
师生聚会感言
2014/01/26 职场文书
《乡愁》教学反思
2014/02/18 职场文书