献上一款漂亮的手写PHP验证码
献上一款漂亮的PHP验证码,可以根据个人需求作调整,代码如下(审美观不同,欢迎吐槽):
<?php
/**
* Author: xiongwei
* Email: 695704253@qq.com
*
* 注:本代码需要要用到 msyh.ttf 字体,请自行下载
**/ header("Content-type:image/png"); //图像尺寸
$width=180;
$height=70;
//字体样式
$font_style='./fontface/msyh.ttf';
//字体大小
$font_size=28;
//干扰点数量
$noise_num=40;
//干扰线数量
$line_num=10; $expression='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$expression=substr(str_shuffle($expression),0,4); $img=imagecreatetruecolor($width,$height);
$bdcolor=imagecolorallocate($img,170,170,170);
$bgcolor=imagecolorallocate($img,250,250,250); imagefilledrectangle($img,0,0,$width,$height,$bgcolor);
imagerectangle($img,0,0,$width-1,$height-1,$bdcolor); $x=10;
$y=ceil(($height+$font_size)/2);
for($i=0;$i<strlen($expression);$i++){
imagettftext($img,$font_size,mt_rand(-30,30),$x,$y,imagecolorallocate($img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)),$font_style,$expression[$i]);
$x+=30;
}
for($i=0;$i<$noise_num;$i++){
imagesetpixel($img,mt_rand(1,$width-1),mt_rand(1,$height-1),imagecolorallocate($img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)));
}
for($i=0;$i<$line_num;$i++){
imagearc($img,mt_rand(-10,0),mt_rand(-10,0),mt_rand(20,400),mt_rand(20,400),50,44,imagecolorallocate($img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)));
//imagearc()
}
imagepng($img);
imagedestroy($img);
?>
效果如下:

献上一款漂亮的手写PHP验证码的更多相关文章
- [转]史上最最最详细的手写Promise教程
我们工作中免不了运用promise用来解决异步回调问题.平时用的很多库或者插件都运用了promise 例如axios.fetch等等.但是你知道promise是咋写出来的呢? 别怕-这里有本promi ...
- [纯C#实现]基于BP神经网络的中文手写识别算法
效果展示 这不是OCR,有些人可能会觉得这东西会和OCR一样,直接进行整个字的识别就行,然而并不是. OCR是2维像素矩阵的像素数据.而手写识别不一样,手写可以把用户写字的笔画时间顺序,抽象成一个维度 ...
- 我是这样手写 Spring 的(麻雀虽小五脏俱全)
人见人爱的 Spring 已然不仅仅只是一个框架了.如今,Spring 已然成为了一个生态.但深入了解 Spring 的却寥寥无几.这里,我带大家一起来看看,我是如何手写 Spring 的.我将结合对 ...
- JavaSE 手写 Web 服务器(二)
原文地址:JavaSE 手写 Web 服务器(二) 博客地址:http://www.extlight.com 一.背景 在上一篇文章 <JavaSE 手写 Web 服务器(一)> 中介绍了 ...
- java手写多级缓存
多级缓存实现类,时间有限,该类未抽取接口,目前只支持两级缓存:JVM缓存(实现 请查看上一篇:java 手写JVM高性能缓存).redis缓存(在spring 的 redisTemplate 基础实现 ...
- 如何手写一款KOA的中间件来实现断点续传
本文实现的断点续传只是我对断点续传的一个理解.其中有很多不完善的地方,仅仅是记录了一个我对断点续传一个实现过程.大家应该也会发现我用的都是一些H5的api,老得浏览器不会支持,以及我并未将跨域考虑入内 ...
- JDK动态代理深入理解分析并手写简易JDK动态代理(上)
原文同步发表至个人博客[夜月归途] 原文链接:http://www.guitu18.com/se/java/2019-01-03/27.html 作者:夜月归途 出处:http://www.guitu ...
- django 常用方法总结 < 手写分页-上传头像-redis缓存,排行 ...>
1.不使用自带模块<Paginator>的手写分页功能views.pydef post_list(request): page = request.GET.get('page', 1) # ...
- vue10行代码实现上拉翻页加载更多数据,纯手写js实现下拉刷新上拉翻页不引用任何第三方插件
vue10行代码实现上拉翻页加载更多数据,纯手写js实现下拉刷新上拉翻页不引用任何第三方插件/库 一提到移动端的下拉刷新上拉翻页,你可能就会想到iScroll插件,没错iScroll是一个高性能,资源 ...
随机推荐
- mysql时间运算
DELETE FROM zhongqiu WHERE caretatime<=ADDDATE(NOW(),-14) caretatime` timestamp NOT NULL DEFAULT ...
- Java 数据类型及转换
整形: byte(1个字节) 范围:-128~127 short(2个字节) 范围:-215~215-1 (-32768~32767) int(4个字节) 范围:-231~231-1 (-214748 ...
- 题目1539:师弟 ——最短路+DFS
题意::从起点到终点的所有的最短路中,找出离终点有X个路口的城市一共有几个 开始我用最短路+DFS从起点开始搜,超时了 换了一种方法,从终点开始搜,AC #include<stdio.h> ...
- MySQL连接查询、联合查询、子查询
参考地址:http://blog.csdn.net/u011277123/article/details/54863371 1.MySQL连接查询 连接查询:将多张表(>=2)进行记录的连接(按 ...
- the road of test
1.firefox打印兼容问题: <HTML> <HEAD> <TITLE>JavaScript利用IE内置打印控件IEWebBrowser进行打印/打印页面设置/ ...
- mysql导入导出表结构
mysql导入导出表结构 导出整个库的表结构如下:mysqldump -uroot -p -d databasename > createtab.sql 如果只想导出表: test1,test2 ...
- win7 安装过程中遇到的错误解决方法
win7 安装过程中遇到的错误解决方法 windows安装无法继续.若要安装windows 请单击 确定 重新启动计算机: 当 出现如上提示的时候,按下shift+f10 会打开命令窗口,进入到C:\ ...
- An invalid form control with name='timeone[]' is not focusable.
在项目开发的时候 遇到了这样的报错 An invalid form control with name='timeone[]' is not focusable. 学习源头:https://segme ...
- FPGA前世今生(四)
前几期我们一直介绍FPGA内部资源,今天我们将用最后的篇幅来介绍剩下的内部资源部分,结束我们FPGA的前世今生.之所以起名字为FPGA前世今生,其实就是介绍一下FPGA内部资源,前世的内部结构资源就不 ...
- Excel开发学习笔记:文件选择控件、查找匹配项、单元格格式及数据有效性
一个自用的基于excel的小工具. , ), .Cells(, )) sysKpiRow.Interior.ColorIndex = ).value = , ) ...