本例为生成中文验证码,专为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. CSS3新增属性

    1>RGBA透明度(红.绿.蓝.alpha透明度) 2>块阴影 box-shadow(标签).text-shadow(文字) 3>圆角阴影 border-radius 4>边框 ...

  2. VC++ 最小化到托盘、恢复

    所谓的“托盘”,在Windows系统界面中,指的就是下面任务条右侧,有系统时间等等的标志的那一部分.在程序最小化或挂起时,但有不希望占据任务栏的时候,就可以把程序放到托盘区. 一.托盘编程相关函数   ...

  3. Maven Archetype

    1. 从project创建archetype 在项目根目录下,运行 mvn archetype:create-from-project 创建的archetype工程在app_folder/target ...

  4. 在Win10系统中关闭Hyper-V

    1.将鼠标移至开始图标,单击右键(注意:是右键,不是左键!!!): 2.点击“控制面板”: 3.点击“程序”: 4.点击“启用或关闭windows功能”: 5.去掉“Hyper-V”的勾选,确定:

  5. 关于16年2月14日以后上传AppStore出现:Missing iOS Distribution signing identity for...的问题

    2016年2月14日以后打包上传AppStore会发现出现如下的问题: 导致问题的原因是:下边这个证书过期了 以下是苹果官方给出的回应: Thanks for bringing this to the ...

  6. LINQ to XML 编程基础

    1.LINQ to XML类 以下的代码演示了如何使用LINQ to XML来快速创建一个xml: 隐藏行号 复制代码 ?创建 XML public static void CreateDocumen ...

  7. IOS低版本遇到了坑不知道你遇到了没

    拿着项目给客户测试,客户那边三个人俩人水果手机是ios8以下版本,结果导致```(恭喜,坑出现!)总不能说老总!"您把版本升级到ios9 吧!

  8. generator class 的含义

    native有天生的,本土的,也就是说生来就有的, 那也就是说自动生成,不需要人工来帮忙或者管控的. 而assigned是指指定的,分配的, 如果你不赋予他甚麼东西,那麼他是不能实现的. 需要人工,自 ...

  9. Hibernate多对一(注解)

    package cqvie.yjq.Util; import java.util.List; import org.hibernate.Query; import org.hibernate.Sess ...

  10. MD5编码的内存泄露

    MD5CryptoServiceProvider 如果多次使用会产生内存溢出,如下这样调用几百万次就会出现内存 溢出. public static string MD5Encode(string so ...