zoukankan      html  css  js  c++  java
  • PHP图形操作之生成图像验证码

    简单的验证码其实就是在图片中输出了几个字符,通过imagestring函数就能实现。

    但是在处理上,为了使验证码更加的安全,防止其他程序自动识别,因此常常需要对验证码进行一些干扰处理,通常会采用绘制一些噪点,干扰线段,对输出的字符进行倾斜、扭曲等操作。

    可以使用imagesetpixel绘制点来实现噪点干扰,但是只绘制一个点的作用不大,因此这里常常会使用循环进行随机绘制。


    例子:
    <?php
    $img = imagecreatetruecolor(100, 40);
    $black = imagecolorallocate($img, 0x00, 0x00, 0x00);
    $green = imagecolorallocate($img, 0x00, 0xFF, 0x00);
    $white = imagecolorallocate($img, 0xFF, 0xFF, 0xFF);
    imagefill($img,0,0,$white);
    //生成随机的验证码
    $code = '';
    for($i = 0; $i < 4; $i++) {  //4位数的验证码
    $code .= rand(0, 9);
    }
    imagestring($img, 5, 10, 10, $code, $black);
    //加入噪点干扰
    for($i=0;$i<50;$i++) {
    imagesetpixel($img, rand(0, 100) , rand(0, 100) , $black);  //imagesetpixel — 画一个单一像素,语法: bool imagesetpixel ( resource $image , int $x , int $y , int $color )
    imagesetpixel($img, rand(0, 100) , rand(0, 100) , $green);
    }
    //输出验证码
    header("content-type: image/png");
    imagepng($img);  //以 PNG 格式将图像输出到浏览器或文件
    imagedestroy($img);  //图像处理完成后,使用 imagedestroy() 指令销毁图像资源以释放内存,虽然该函数不是必须的,但使用它是一个好习惯。
    
    ?>
    【小主,觉得有用打赏点哦!多多少少没关系,一分也是对我的支持和鼓励。谢谢!】
  • 相关阅读:
    双camera景深计算
    解决单反出片发灰难题 教你让照片变得通透
    增强画面纵深感的几个小技巧
    双目视觉算法简介
    Android系统源代码的下载与编译
    android 7.0 (nougat)的编译优化-ninja
    神奇的图像处理算法
    【老戴说镜头】浅谈双摄镜头技术
    [Android编程心得] Camera(OpenCV)自动对焦和触摸对焦的实现
    关于DLL模块导出函数
  • 原文地址:https://www.cnblogs.com/wuql/p/5970054.html
Copyright © 2011-2022 走看看