PHP生成制作验证码,php生成验证码
看完就会,不会你打我,话不多说、开搞(人狠话不多)
1.0 首先先看代码
<span><span> 1</span> <?<span>php </span><span> 2</span> <span>header</span>("Content-Type:text/html;Charset=UTF-8");<span>//</span><span> 设置页面的编码风格</span> <span> 3</span> <span>header</span>("Content-Type:image/jpeg");<span>//</span><span> 通知浏览器输出的是jpeg格式的图像</span> <span> 4</span> <span> 5</span> <span>$img</span> = imagecreatetruecolor(150,50);<span>//</span><span>创建画布并设置大小 x轴150 y轴50</span> <span> 6</span> <span> 7</span> <span>$bgcolor</span> = imagecolorallocate(<span>$img</span>, <span>mt_rand</span>(0,255), <span>mt_rand</span>(0,255), <span>mt_rand</span>(0,255));<span>//</span><span>分配背景颜色</span> <span> 8</span> imagefill(<span>$img</span>, 0, 0, <span>$bgcolor</span>); <span>//</span><span>//把背景填充到图像</span> <span> 9</span> imagejpeg(<span>$img</span>); <span>//</span><span> 输出图像</span> <span>10</span> imagedestroy(<span>$img</span>); <span>//</span><span> 销毁图像</span> <span>11</span> ?></span>
好,现在结合以上代码,来分析分析以上用到的几个函数:
① imagecreatetruecolor();
imagecreatetruecolor — 新建一个真彩色图像(感觉哇,那么长,其实仔细一看挺好记的 image/create/true/color,什么是真彩色图像?往下看)
<span><span>1</span> <span>resource</span> imagecreatetruecolor ( int <span>$width</span> , int <span>$height</span> )</span>
imagecreatetruecolor() 和 imagecreate()两个函数都能创建画布
<span><span>1</span> <span>resource</span> imagecreate ( int <span>$x_size</span> , int <span>$y_size</span> )</span>
imagecreatetruecolor()建立的是一幅大小为 x和 y的黑色图像(默认为黑色[即便叫法就是真彩色图像]),如想改变背景颜色则需要用填充颜色函数 imagefill($img,0,0,$color);
imagecreate 新建一个空白图像资源,用imagecolorAllocate()添加背景色
上面两个函数只不过是一个功能的两种方法
② imagecolorallocate();
imagecolorallocate — 为一幅图像分配颜色
<span><span>1</span> int imagecolorallocate ( <span>resource</span> <span>$image</span> , int <span>$red</span> , int <span>$green</span> , int <span>$blue</span> )</span>
颜色分别用 红 绿 蓝三色组合,这些参数是 0 到 255 的整数或者十六进制的 0x00 到 0xFF。
③ mt_rand();
mt_rand — 生成更好的随机数
<span><span>1</span> int <span>mt_rand</span> ( int <span>$min</span> , int <span>$max</span> )</span>
$min
可选的、返回的最小值(默认:0) $max
可选的、返回的最大值(默认:mt_getrandmax())
- 这里就是用来让他随机生成背景颜色,0-255随便取值。所以页面没刷新一次画布背景颜色就不一样。
- 效果图:
2.0 开始往里面做干扰线,干扰点。防止验证图像被秒识别
<span><span> 1</span> <?<span>php </span><span> 2</span> <span>header</span>("Content-Type:text/html;Charset=UTF-8");<span>//</span><span> 设置页面的编码风格</span> <span> 3</span> <span>header</span>("Content-Type:image/jpeg");<span>//</span><span> 通知浏览器输出的是jpeg格式的图像</span> <span> 4</span> <span> 5</span> <span>$img</span> = imagecreatetruecolor(150,50);<span>//</span><span>创建画布并设置大小 x轴150 y轴50</span> <span> 6</span> <span> 7</span> <span>$bgcolor</span> = imagecolorallocate(<span>$img</span>, <span>mt_rand</span>(0,255), <span>mt_rand</span>(0,255), <span>mt_rand</span>(0,255));<span>//</span><span>分配背景颜色 </span><span> 8</span> <span> 9</span> <span>//添加干扰线,并循环3次,背景颜色随机</span> <span>10</span> <span>for</span>(<span>$i</span>=0;<span>$i</span><3;<span>$i</span>++<span>){ </span><span>11</span> <span>12</span> <span>$linecolor</span> = imagecolorallocate(<span>$img</span>,<span>mt_rand</span>(0,255),<span>mt_rand</span>(0,255),<span>mt_rand</span>(0,255<span>)); </span><span>13</span> imageline(<span>$img</span>, <span>mt_rand</span>(0,150), <span>mt_rand</span>(0,50), <span>mt_rand</span>(0,150), <span>mt_rand</span>(0,50), <span>$linecolor</span><span>); </span><span>14</span> <span>15</span> <span>} </span><span>16</span> <span>//</span><span>添加干扰点,并循环25次,背景颜色随机</span> <span>17</span> <span>for</span>(<span>$i</span>=0;<span>$i</span><25;<span>$i</span>++<span>){ </span><span>18</span> <span>19</span> <span>$dotcolor</span> = imagecolorallocate(<span>$img</span>, <span>mt_rand</span>(0,255), <span>mt_rand</span>(0,255), <span>mt_rand</span>(0,255<span>)); </span><span>20</span> imagesetpixel(<span>$img</span>, <span>mt_rand</span>(0,150), <span>mt_rand</span>(0,60), <span>$dotcolor</span><span>); </span><span>21</span> <span>22</span> <span>} </span><span>23</span> <span>24</span> imagefill(<span>$img</span>, 0, 0, <span>$bgcolor</span>); <span>//</span><span>//把背景填充到图像</span> <span>25</span> imagejpeg(<span>$img</span>); <span>//</span><span> 输出图像</span> <span>26</span> imagedestroy(<span>$img</span>); <span>//</span><span> 销毁图像</span> <span>27</span> ?></span>
函数分析:
① imageline();
imageline — 画一条线段
<span><span>1</span> bool imageline ( <span>resource</span> <span>$image</span> , int <span>$x1</span> , int <span>$y1</span> , int <span>$x2</span> , int <span>$y2</span> , int <span>$color</span> )</span>
imageline() 用 color
颜色在图像 image
中从坐标 x1
,y1
到 x2
,y2
(图像左上角为 0, 0)画一条线段。
<span><em>imageline($img, mt_rand(0,150), mt_rand(0,50), mt_rand(0,150), mt_rand(0,50), $linecolor);<br /></em><br />这里意思就是 画布$img 中从坐标 <code class="parameter">x1</code>,<code class="parameter">y1</code> 到 <code class="parameter">x2</code>,<code class="parameter">y2</code>随机<br /></span>
② imagesetpixel();
imagesetpixel— 画一个单一像素
<span><span>1</span> bool imagesetpixel ( <span>resource</span> <span>$image</span> , int <span>$x</span> , int <span>$y</span> , int <span>$color</span> )</span>
imagesetpixel() 在 image
图像中用 color
颜色在 x
,y
坐标(图像左上角为 0,0)上画一个点。
<span><em>imagesetpixel($img, mt_rand(0,150), mt_rand(0,60), $dotcolor);<br /></em>具体含义同上<br /><br /></span>
效果图:
3.0 添加验证字母数字
<span><span> 1</span> <?<span>php </span><span> 2</span> <span>header</span>("Content-Type:text/html;Charset=UTF-8");<span>//</span><span> 设置页面的编码风格</span> <span> 3</span> <span>header</span>("Content-Type:image/jpeg");<span>//</span><span> 通知浏览器输出的是jpeg格式的图像</span> <span> 4</span> <span> 5</span> <span>$img</span> = imagecreatetruecolor(150,50);<span>//</span><span>创建画布并设置大小 x轴150 y轴50</span> <span> 6</span> <span> 7</span> <span>$bgcolor</span> = imagecolorallocate(<span>$img</span>, <span>mt_rand</span>(0,255), <span>mt_rand</span>(0,255), <span>mt_rand</span>(0,255));<span>//</span><span>分配背景颜色 </span><span> 8</span> <span> 9</span> <span>//添加干扰线,并循环3次,背景颜色随机</span> <span>10</span> <span>for</span>(<span>$i</span>=0;<span>$i</span><3;<span>$i</span>++<span>){ </span><span>11</span> <span>12</span> <span>$linecolor</span> = imagecolorallocate(<span>$img</span>,<span>mt_rand</span>(0,255),<span>mt_rand</span>(0,255),<span>mt_rand</span>(0,255<span>)); </span><span>13</span> imageline(<span>$img</span>, <span>mt_rand</span>(0,150), <span>mt_rand</span>(0,50), <span>mt_rand</span>(0,150), <span>mt_rand</span>(0,50), <span>$linecolor</span><span>); </span><span>14</span> <span>15</span> <span>} </span><span>16</span> <span>//</span><span>添加干扰点,并循环25次,背景颜色随机</span> <span>17</span> <span>for</span>(<span>$i</span>=0;<span>$i</span><25;<span>$i</span>++<span>){ </span><span>18</span> <span>19</span> <span>$dotcolor</span> = imagecolorallocate(<span>$img</span>, <span>mt_rand</span>(0,255), <span>mt_rand</span>(0,255), <span>mt_rand</span>(0,255<span>)); </span><span>20</span> imagesetpixel(<span>$img</span>, <span>mt_rand</span>(0,150), <span>mt_rand</span>(0,60), <span>$dotcolor</span><span>); </span><span>21</span> <span>22</span> <span>} </span><span>23</span> <span>24</span> <span>//</span><span>添加需要验证的字母或者数字</span> <span>25</span> <span>$rand_str</span> = "qwertyuiopasdfghjklzxcvbnm1234567890";<span>//</span><span>需要使用到验证的一些字母和数字</span> <span>26</span> <span>$str_arr</span> = <span>array</span>(); <span>//</span><span>命名一个数组</span> <span>27</span> <span>for</span>(<span>$i</span> = 0;<span>$i</span><4;<span>$i</span>++){ <span>//</span><span>循环4次,就是有四个随机的字母或者数字 </span> <span>28</span> <span>$pos</span> = <span>mt_rand</span>(0,<span>strlen</span>(<span>$rand_str</span>)-1<span>); </span><span>29</span> <span>$str_arr</span>[] = <span>$rand_str</span>[<span>$pos</span>];<span>//</span><span>临时交换</span> <span>30</span> <span>} </span><span>31</span> <span>32</span> <span>$x_start</span>=150/4;<span>//</span><span>单个字符X轴位置</span> <span>33</span> <span>34</span> <span>foreach</span> (<span>$str_arr</span> <span>as</span> <span>$key</span><span>) { </span><span>35</span> <span>$fontcolor</span> = imagecolorallocate(<span>$img</span>, <span>mt_rand</span>(0,255), <span>mt_rand</span>(0,255), <span>mt_rand</span>(0,255<span>)); </span><span>36</span> imagettftext(<span>$img</span>, 25, <span>mt_rand</span>(-15,15), <span>$x_start</span>, 50/2, <span>$fontcolor</span>, "C:/Windows/Fonts/Verdana.TTF", <span>$key</span><span>); </span><span>37</span> <span>$x_start</span> +=20;<span>//</span><span>遍历后单个字符沿X轴 +20</span> <span>38</span> <span>} </span><span>39</span> <span>40</span> imagefill(<span>$img</span>, 0, 0, <span>$bgcolor</span>); <span>//</span><span>//把背景填充到图像</span> <span>41</span> imagejpeg(<span>$img</span>); <span>//</span><span> 输出图像</span> <span>42</span> imagedestroy(<span>$img</span>); <span>//</span><span> 销毁图像</span> <span>43</span> ?></span>
函数:
imagettftext();
imagettftext — 用 TrueType 字体向图像写入文本
<span><span>1</span> <span>array</span> imagettftext ( <span>resource</span> <span>$image</span> , <span>float</span> <span>$size</span> , <span>float</span> <span>$angle</span> , int <span>$x</span> , int <span>$y</span> , int <span>$color</span> , <span>string</span> <span>$fontfile</span> , <span>string</span> <span>$text</span> )</span>
分析下面的代码:
<span>imagettftext($img, 25, mt_rand(-15,15), $x_start, 50/2, $fontcolor, "C:/Windows/Fonts/Verdana.TTF", $key);</span>
$img-----------画布
25-----------字体的尺寸。
mt_rand(-15,15)----------角度制表示的角度,0 度为从左向右读的文本。更高数值表示逆时针旋转。例如 90 度表示从下向上读的文本。(就是字体角度的问题,)
$x_start----------通俗易懂的讲就是字符的X轴位置
50/2----------字符的高度
$fontcolor----------字符颜色
"C:/Windows/Fonts/Verdana.TTF"----------字符的字体样式路径
$key-----------遍历出后的字符
效果:
看起来还是挺可爱的。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

드림위버 CS6
시각적 웹 개발 도구

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경
