用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 相关文章推荐
php adodb连接mssql解决乱码问题
Jun 12 PHP
phpmyadmin 3.4 空密码登录的实现方法
May 29 PHP
解析CodeIgniter自定义配置文件
Jun 18 PHP
ThinkPHP实现非标准名称数据表快速创建模型的方法
Nov 29 PHP
Linux系统中设置多版本PHP共存配合Nginx服务器使用
Dec 21 PHP
Symfony2学习笔记之系统路由详解
Mar 17 PHP
PHP链表操作简单示例
Oct 15 PHP
PHP简单实现冒泡排序的方法
Dec 26 PHP
PHP图片水印类的封装
Jul 06 PHP
Laravel框架中Blade模板的用法示例
Aug 30 PHP
PHP5.0 TIDY_PARSE_FILE缓冲区溢出漏洞的解决方案
Oct 14 PHP
PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pdo】
Nov 04 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
天使彦史上最神还原,性别曝光的那一刻,百万网友恋爱了
2020/03/02 国漫
php中ltrim()、rtrim()与trim()删除字符空格实例
2014/11/25 PHP
常用PHP数组排序函数归纳
2016/08/08 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
extjs form textfield的隐藏方法
2008/12/29 Javascript
js有关元素内容操作小结
2011/12/20 Javascript
js 实现 input type=&quot;file&quot; 文件上传示例代码
2013/08/07 Javascript
JavaScript中一个奇葩的IE浏览器判断方法
2014/04/16 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
JavaScript中this详解
2015/09/01 Javascript
AngularJS使用自定义指令替代ng-repeat的方法
2016/09/17 Javascript
jQuery web 组件 后台日历价格、库存设置的代码
2016/10/14 Javascript
jQuery Validate 数组 全部验证问题
2017/01/12 Javascript
js实现漫天星星效果
2017/01/19 Javascript
JavaScript制作简易计算器(不用eval)
2017/02/05 Javascript
深入理解vue.js中$watch的oldvalue与newValue
2017/08/07 Javascript
关于HTTP传输中gzip压缩的秘密探索分析
2018/01/12 Javascript
Vue CLI3 如何支持less的方法示例
2018/08/29 Javascript
Vue el-autocomplete远程搜索下拉框并实现自动填充功能(推荐)
2019/10/25 Javascript
详解JavaScript 中的批处理和缓存
2020/11/19 Javascript
JS如何实现在弹出窗口中加载页面
2020/12/03 Javascript
微信小程序视频弹幕发送功能的实现
2020/12/28 Javascript
python3 模拟登录v2ex实例讲解
2017/07/13 Python
在Python中使用gRPC的方法示例
2018/08/08 Python
pyqt实现.ui文件批量转换为对应.py文件脚本
2019/06/19 Python
django框架F&amp;Q 聚合与分组操作示例
2019/12/12 Python
Python动态导入模块:__import__、importlib、动态导入的使用场景实例分析
2020/03/30 Python
pandas DataFrame 数据选取,修改,切片的实现
2020/04/24 Python
Django serializer优化类视图的实现示例
2020/07/16 Python
方正Java笔试题
2014/07/03 面试题
财务会计专业推荐信
2013/11/30 职场文书
兰兰过桥教学反思
2014/02/08 职场文书
信息技术毕业生自荐信范文
2014/03/13 职场文书
zabbix agent2 监控oracle数据库的方法
2021/05/13 Oracle
你知道Java Spring的两种事务吗
2022/03/16 Java/Android
插件导致ECharts被全量引入的坑示例解析
2022/09/23 Javascript