当前位置:  开发笔记 > 编程语言 > 正文

PHP生成GIF动态图片验证码

相信很多人都想过如何用PHP生成GIF动画来实现动态图片验证码,以下是实现过程。ImageCode函数通过GIFEncoder类实现的GIF动画的PHP源代码,有兴趣的朋友可以研究一下。效果如图:/***Image...">

  相信很多人都想过如何用PHP生成GIF动画来实现动态图片验证码,以下是实现过程。

  ImageCode函数通过GIFEncoder类实现的GIF动画的PHP源代码,有兴趣的朋友可以研究一下。

  效果如图:

点击查看原图

 

  /**

  * ImageCode 生成GIF图片验证

  * @param $string 字符串

  * @param $width 宽度

  * @param $height 高度

  * */

  function ImageCode($string = '', $width = 75, $height = 25)

  {

  $authstr = $string ? $string : ((time() % 2 == 0) ? mt_rand(1000, 9999) : mt_rand(10000, 99999));

  $board_width = $width;

  $board_height = $height;

  // 生成一个32帧的GIF动画

  for($i = 0; $i <32; $i++)

  {

  ob_start();

  $image = imagecreate($board_width, $board_height);

  imagecolorallocate($image, 0,0,0);

  // 设定文字颜色数组

  $colorList[] = ImageColorAllocate($image, 15,73,210);

  $colorList[] = ImageColorAllocate($image, 0,64,0);

  $colorList[] = ImageColorAllocate($image, 0,0,64);

  $colorList[] = ImageColorAllocate($image, 0,128,128);

  $colorList[] = ImageColorAllocate($image, 27,52,47);

  $colorList[] = ImageColorAllocate($image, 51,0,102);

  $colorList[] = ImageColorAllocate($image, 0,0,145);

  $colorList[] = ImageColorAllocate($image, 0,0,113);

  $colorList[] = ImageColorAllocate($image, 0,51,51);

  $colorList[] = ImageColorAllocate($image, 158,180,35);

  $colorList[] = ImageColorAllocate($image, 59,59,59);

  $colorList[] = ImageColorAllocate($image, 0,0,0);

  $colorList[] = ImageColorAllocate($image, 1,128,180);

  $colorList[] = ImageColorAllocate($image, 0,153,51);

  $colorList[] = ImageColorAllocate($image, 60,131,1);

  $colorList[] = ImageColorAllocate($image, 0,0,0);

  $fOntcolor= ImageColorAllocate($image, 0,0,0);

  $gray = ImageColorAllocate($image, 245,245,245);

  $color = imagecolorallocate($image, 255,255,255);

  $color2 = imagecolorallocate($image, 255,0,0);

  imagefill($image, 0, 0, $gray);

  $space = 15; // 字符间距

  if($i > 0) // 屏蔽第一帧

  {

  for ($k = 0; $k

  {

  $colorRandom = mt_rand(0,sizeof($colorList)-1);

  $float_top = rand(0,4);

  $float_left = rand(0,3);

  imagestring($image, 6, $space * $k, $top + $float_top, substr($authstr, $k, 1), $colorList[$colorRandom]);

  }

  }

  for ($k = 0; $k <20; $k++)

  {

  $colorRandom = mt_rand(0,sizeof($colorList)-1);

  imagesetpixel($image, rand()%70 , rand()%15 , $colorList[$colorRandom]);

  }

  // 添加干扰线

  for($k = 0; $k <3; $k++)

  {

  $colorRandom = mt_rand(0, sizeof($colorList)-1);

  // $todrawline = rand(0,1);

  $todrawline = 1;

  if($todrawline)

  {

  imageline($image, mt_rand(0, $board_width), mt_rand(0,$board_height), mt_rand(0,$board_width), mt_rand(0,$board_height), $colorList[$colorRandom]);

  }

  else

  {

  $w = mt_rand(0,$board_width);

  $h = mt_rand(0,$board_width);

  imagearc($image, $board_width - floor($w / 2) , floor($h / 2), $w, $h, rand(90,180), rand(180,270), $colorList[$colorRandom]);

  }

  }

  imagegif($image);

  imagedestroy($image);

  $imagedata[] = ob_get_contents();

  ob_clean();

  ++$i;

  }

  $gif = new GIFEncoder($imagedata);

  Header (&#39;Content-type:image/gif&#39;);

  echo $gif->GetAnimation();

  }

 

  有关GIFEncoder类,可在网络中得到下载~


推荐阅读
  • QQ坦白说功能详解:身份标签全解析与应用指南
    如今,许多用户正在体验手机QQ的坦白说功能,许多人对这一功能中的身份标签选择感到好奇。本文将详细介绍可用的身份标签及其具体应用,帮助大家更好地理解和使用坦白说功能。如果你对坦白说还不熟悉,欢迎点击链接了解更多详细信息。 ... [详细]
  • 为了在Fragment中直接调用Activity的方法,可以通过定义一个接口并让Activity实现该接口来实现。具体步骤包括:首先在Fragment中声明一个接口,并在Activity中实现该接口。接着,在Fragment中通过类型转换检查Activity是否实现了该接口,如果实现了则调用相应的方法。这种方法不仅提高了代码的解耦性,还增强了模块间的通信效率。此外,还可以通过ViewModel或LiveData等现代Android架构组件进一步优化这一过程,以实现更加高效和可靠的通信机制。 ... [详细]
  • 鬩字详解:新华字典中的读音、释义、笔画及常见组词与命名应用 ... [详细]
  • PHP中处理回车换行符转换的有效方法与技巧
    PHP中处理回车换行符转换的有效方法与技巧 ... [详细]
  • 在ASP.NET MVC项目中,通过实战解决了Ajax请求500错误及多表数据查询的问题。具体而言,将页面分为两个部分,用户点击右侧导航栏时,通过Ajax请求动态加载数据,并在右侧显示相应的页面内容。最初尝试使用Partial Action方法,但遇到了500错误。通过详细排查和调试,最终成功解决了这一问题,并实现了预期功能。此外,还优化了多表数据查询的性能,确保系统的高效运行。 ... [详细]
  • 通过自定义 `TextView`,实现了在用户点击或焦点变化时动态调整字体颜色的效果。该方法利用了 `ColorStateList` 和 `Selector` 资源文件,确保了界面交互的流畅性和视觉效果的提升。具体实现中,通过重写 `onTouchEvent` 和 `onFocusChanged` 方法,精确控制了颜色变化的时机和状态。此外,还对性能进行了优化,确保在高频率操作下依然保持高效响应。 ... [详细]
  • 尽管许多人认为跑步是一项简单的运动,但实际上它涉及诸多专业知识。不正确的跑步方式不仅会降低锻炼效果,还可能引发伤害。例如,穿着不合脚或过于陈旧的跑鞋,会导致足部支撑不足,增加受伤风险。此外,跑步姿势不当、热身不足、过度训练等问题也同样值得关注。本文将详细介绍七大常见跑步误区,并提供专业的改进建议,帮助跑者避免这些问题,提高运动效率和安全性。 ... [详细]
  • Java初始化中的潜在风险与应对策略 ... [详细]
  • 在第六章中,我们将深入探讨MySQL中的多表查询技术,包括联结查询和子查询。联结查询通过将两个或多个表进行连接,基于连接条件生成结果集。常见的联结类型有内联结、外联结和全外联结。交叉联结(CROSS JOIN)虽然使用较少,但其原理是生成所有可能的组合,类似于笛卡尔积的概念。此外,子查询则是在一个查询语句中嵌套另一个查询,用于获取更复杂的数据集。本章将通过实例详细讲解这些查询方法的应用和优化技巧。 ... [详细]
  • 如何在PHP中提取数字的特定位数值
    本文将详细介绍如何在PHP中提取数字的特定位置的数值。这一技巧对于数据处理和算法实现具有重要意义,通过实例代码和详细解析,帮助读者掌握该方法的应用场景和实现方式。 ... [详细]
  • 本文深入探讨了 iOS 开发中 `int`、`NSInteger`、`NSUInteger` 和 `NSNumber` 的应用与区别。首先,我们将详细介绍 `NSNumber` 类型,该类用于封装基本数据类型,如整数、浮点数等,使其能够在 Objective-C 的集合类中使用。通过分析这些类型的特性和应用场景,帮助开发者更好地理解和选择合适的数据类型,提高代码的健壮性和可维护性。苹果官方文档提供了更多详细信息,可供进一步参考。 ... [详细]
  • PHP图床源码:集成化图床管理系统解决方案
    本项目提供了一套集成化的图床管理系统解决方案,适用于需要高效管理图片资源的场景。系统结构简洁,无需复杂的后台支持。主要文件包括 `huluxia.php`、`index.html`、`inews.php`、`kw.php` 和 `zz.php`,每个文件都承担了特定的功能,确保系统的稳定运行和易用性。 ... [详细]
  • 业务背景:为了规范22毫米配置的采购信息记录,需明确其编码范围。通过事务码OMEO,在物料管理模块下的采购子模块中,具体路径为“物料管理-采购-采购信息记录-定义编码范围”,进行编码范围的定义。首先,需进入SPRO系统进行相关设置。此步骤确保了采购信息记录的标准化与可追溯性,提高了供应链管理的效率。 ... [详细]
  • 在本教程中,我们将详细介绍如何使用 ArcGIS API 3.x for JavaScript 绘制风向流动图。如果您对所涉及的 API 类不熟悉,建议参考 Esri 官方网站上的 ArcGIS API 3.x for JavaScript 文档,其中提供了详尽的类介绍和使用说明。此外,我们还将提供完整的源代码,帮助您更好地理解和实现这一功能。 ... [详细]
  • 解决基于XML配置的MyBatis在Spring整合中出现“无效绑定语句(未找到):com.music.dao.MusicDao.findAll”问题的方法
    在将Spring与MyBatis进行整合时,作者遇到了“无效绑定语句(未找到):com.music.dao.MusicDao.findAll”的问题。该问题主要出现在使用XML文件配置DAO层的情况下,而注解方式配置则未出现类似问题。作者详细分析了两个配置文件之间的差异,并最终找到了解决方案。本文将详细介绍问题的原因及解决方法,帮助读者避免类似问题的发生。 ... [详细]
author-avatar
吻过彩虹的脸_378
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有