本例为生成中文验证码,专为laravel而生.

//控制器:
public function getVcode(Request $request){
$width=845;
$height=125;
$fp=fopen(url('/').'/front/register/chengyu.txt','r');//打开本地文件,里面存了150条成语!一行一条.
$hang=rand(0,149);
for($i=0;;$i++){
$get=fgets($fp);
if($i==$hang)
break;
}
$text=$get;//得到的成语字符串
header('content-type:image/jpeg');
//1、创建画布
$img = imagecreatetruecolor($width,$height);
//1-1、背景颜色随机 0~125深色 126~255 浅色
$bgColor = imagecolorallocate($img,rand(126,255),rand(126,255),rand(126,255));
imagefill($img,0,0,$bgColor);
//2、写字或画画
//2-1、画点点
for($i = 0 ; $i <= ($height*$width/15) ; $i++){
$pixX = rand(5,$width-5);//随机x的位置
$pixY = rand(5,$height-5);//随机的Y的位置
$pixColor = imagecolorallocate($img,rand(0,125),rand(0,125),rand(0,125));
imagesetpixel($img,$pixX,$pixY,$pixColor);
}
//2-2、写字 $code = 'abcdefghijklmnopqrstuvwxyz';
$len = mb_strlen($text,'UTF-8');
for($j = 1 ; $j <= 4 ; $j++){
//字体大小随机从15像素~20像素
$fontSize = rand(($height/2-5),($height/2+10));
//x的位置
$fontX = ($width/ 4) * ($j-1);//25 50 75 100
//Y的位置
$fontY = $height*0.75;
//字体颜色
$fontColor = imagecolorallocate($img,rand(0,125),rand(0,125),rand(0,125));
//每次随机出来的字 $fontText = mb_substr($text,$j-1,1,'UTF-8');//读取一个汉字
//echo $fontText;
imagettftext($img,$fontSize,0,$fontX,$fontY,$fontColor,$_SERVER['DOCUMENT_ROOT'].'/front/register/FZSTK.TTF',$fontText);
}
//3、输出或保存
imagejpeg($img);
//4、解析模板
view('front.register.showvcode',['dd'=> imagejpeg($img)]);
    //5销毁资源
     image_destroy($img);
}

  主要 解决以下一个问题:

1 laravel路由和模板文件自行设计.

2 fopen打开public目录下的文件:

 $fp=fopen(url('/').'/front/register/chengyu.txt','r');

3 截取汉字,utf8格式,使用mb_substr

mb_substr($text,$j-1,1,'UTF-8');

4 ttf文件访问

$_SERVER['DOCUMENT_ROOT'].'/front/register/FZSTK.TTF'

5 变量带到模板

['dd'=> imagejpeg($img)]

6 文件保存为utf-8无bom格式,以及注意TTF到底是要输出英文还是中文!!不要搞错.

laravel中如何写验证码文件,并防止中文乱码.的更多相关文章

  1. source命令 导入.sql文件时,中文乱码 或者是注释乱码

    1.source命令 导入.sql文件时,中文乱码 或者是注释乱码 首先进入dos命令,进入mysql数据库,之后use 数据库:之后查看你的mysql数据库编码 如下命令:模糊查询变量charact ...

  2. eclipse中添加进新的java项目中文乱码

    eclipse中添加进新的java项目中文乱码 添加学习的一些项目进eclipse中,结果其中的中文注释都变成了乱码 右击项目,点最下面的属性,出来新得弹框 在文本文件编码部分可以发现是GBK格式,选 ...

  3. 如何解决jQuery easyui中locale文件下easyui-lang-zh_CN中文乱码问题

    1.在保存eclipse项目的目录下找到引入easyui-lang-zh_CN.js 2.用记事本打开该js文件,若打开后的中文正常,直接复制,粘贴到项目中的该js文件中,保存 3.若打开后中文出现乱 ...

  4. securefx 系统中不到指定文件 (转中文)

    如何处理上传工具SecureFX中的中文乱码 工具/原料   SecureFX centos7 方法/步骤  转百度知道 https://jingyan.baidu.com/article/eae07 ...

  5. Linux中文件/文本的中文乱码解决方法

    Linux显示在Windows编辑过的中文就会显示乱码是由于两个操作系统使用的编码不同所致.Linux下使用的编码是utf8,而Windows使用的是gb18030.因此,解决Linux打开txt/c ...

  6. bat脚本启动exe并打开文件后退出 + 中文乱码

    写了个脚本用于复制模板到新的cpp文件. 将脚本路径加到环境变量里,只需在cmd窗口输入“new hdu 1419”,就会自动将模板拷贝到WORK_DIR下的hdu文件夹内一个名叫"1419 ...

  7. spingboot项目在windows环境中运行时接收参数及日志中文乱码

    1.logback.xml配置 appender中添加 <param name="Encoding" value="UTF-8" /> <co ...

  8. JAVA本地读取文件,解决中文乱码问题

    JAVA本地读取文件出现中文乱码,查阅一个大神的博客做一下记录 import java.io.BufferedInputStream;import java.io.BufferedReader;imp ...

  9. 外部调用JS文件时出现中文乱码的解决办法

    若测试网页的编码格式为:gb2312,而调用外部JS文件时出现了乱码(前提是JS文件无错误),则将调用的外部JS文件用记事本打开,然后再保存成编码格式为UTF-8的JS文件即可. 若测试网页的编码格式 ...

随机推荐

  1. 使用HTML5新支持的搭建WebRtc环境来作为视频通讯

    发现如果再重新设计这块的话,又会有不同的思路.对于可定位能力,我们可以全息日志采集,将每个用户在整个系统的走向异步的抓取下来,再同步到专门的日志分析系统,在这个系统中可以根据用户号码.订单号进行过滤分 ...

  2. WebServers发布提示oracle客户端模式不一致

    问题:System.InvalidOperationException: 尝试加载 Oracle 客户端库时引发BadImageFormatException.如果在安装32 位Oracle 客户端组 ...

  3. android开发——学习总结20131204

    android:launchMode,即Activity的启动模式,与Intent中的Flags共同作用,决定Activity如何启动. android:launchMode分别有"stan ...

  4. 介绍一款非常适合做微网站并且免费的CMS系统

    在微网站火热的今天,寻找一款具备 web app功能的CMS系统能够大大提高我们的工作效率,eBSite升级到3.0后,开始支持web app 皮肤,也就是创建一个站点,会同时绑定一个PC版皮肤与一个 ...

  5. IOS系列swift语言之课时四

    今天我们要讲的主要有:下标.可为空的类型.枚举(特殊的枚举:递归枚举).原生值.关联值 首先来分析一下这个下标,就是说我们可以通过下标找到对应的值或者是改变对应的值. 其次是可为空的类型,我们要牢记所 ...

  6. Maven安装与配置

    下载: 1.从官网http://maven.apache.org中下载,下载下来的是一个压缩包,解压即可.因为Maven本身也是用Java实现的.2.Maven的目录结构   /bin; maven的 ...

  7. CSS考试题目

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. NPOI操作excel

    1.基本导出方法 private void ExportToExcel() { SaveFileDialog sdfExport = new SaveFileDialog(); sdfExport.F ...

  9. Git学习(四)——分支管理

    一.创建与合并分支 1.创建分支 一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点.每次提交 ,mast ...

  10. let it be

    回家路上听到电台里主持人在介绍这首歌,听得我两眼模糊,真的太应最近的心情了. let it be.