Bagaimana untuk melaksanakan kod pengesahan imej dalam php

藏色散人
Lepaskan: 2023-03-13 06:02:02
asal
4560 orang telah melayarinya

Cara melaksanakan kod pengesahan imej dalam PHP: 1. Muatkan sambungan GD 2. Buat kanvas dan tambahkan kandungan pada kanvas; data kod pengesahan rawak Itu sahaja.

Bagaimana untuk melaksanakan kod pengesahan imej dalam php

Persekitaran pengendalian artikel ini: sistem Windows 7, PHP versi 7.1, komputer DELL G3.

Bagaimana untuk melaksanakan kod pengesahan imej dalam PHP?

PHP melaksanakan fungsi kod pengesahan gambar

Kod pengesahan: captcha, ialah teknologi yang digunakan untuk membezakan orang daripada komputer
Prinsip (Turing Awam Automatik Sepenuhnya Ujian untuk Memberitahu Komputer dan Manusia Berpisah (Ujian Turing automatik penuh untuk membezakan komputer dan manusia)

Bagaimana untuk membezakan komputer dan manusia?
Selagi ia adalah kandungan teks, komputer pasti dapat mengenalinya; adalah Kandungan gambar tidak boleh dikenali, tetapi mata manusia boleh mengenal pasti kandungan dalam gambar dengan mudah.

Intipati kod pengesahan: mencetak kandungan teks pada gambar untuk menyedari perbezaan antara komputer dan manusia .

1. Memahami sambungan imej

PHP sendiri tidak boleh mengendalikan imej.
PHP boleh menggunakan sambungan imej yang disediakan untuk mengendalikan imej.

Terdapat banyak sambungan imej: yang biasa digunakan ialah GD

Memuatkan sambungan GD: Semua fungsi sambungan GD bermula dengan imej

2 gambar operasi

1. Tambah kanvas (buat kanvas)

imej sumber imejcreatetruecolor (lebar, tinggi) 2. Tambahkan kandungan (teks) pada kanvas

a) kepada apa yang akan menjadi Berikan warna pada kandungan yang ditambahkan pada gambar: mula-mula kaitkan warna dengan sumber gambar, dan kemudian gunakan

pemegang warna [integer] imagecolorallocate (sumber gambar, merah, hijau, biru ); //Warna boleh menggunakan nombor 0- 255 atau menggunakan heksadesimal#Hex


b) untuk menulis teks: Anda hanya boleh menulis bahasa Inggeris (kandungan pada jadual kod ASCII)

Rentetan imej Boolean (imej sumber, saiz teks, mula X Koordinat, mula Y koordinat, menulis kandungan, warna);

Saiz fon: 1-5

3 Simpan output

imagepng (sumber imej [. , simpan lokasi]);

4 Keluarkan sumber (sumber yang disyorkan)

Imej hasil Boolean (sumber gambar);

3
//1.    创建画布
$img = imagecreatetruecolor(200,200);
//var_dump($img);

//2.    作画
//2.1   给画布分配颜色
$color = imagecolorallocate($img,255,255,255);
//echo $color;

//2.2   写入文字
$true = imagestring($img,5,50,90,'hello world',$color);
//var_dump($true);

//3.    保存输出内容
//3.1   输出
//告诉浏览器,内容是图片
//header('Content-type:image/png');
//imagepng($img);

//3.2   保存图片
imagepng($img,'hello.png'); // 保存到当前目录

//4.    释放资源
$res = imagedestroy($img);
var_dump($res);
Salin selepas log masuk

1. Hasilkan data kod pengesahan rawak

2. Cipta kanvas

3 handle); //isi imej: Selepas mencari piksel, jika didapati bahawa piksel bersebelahan mengelilingi mempunyai warna yang sama dengan piksel semasa (semua hitam), ia akan dipaparkan secara automatik

4 kandungan: Mula-mula tetapkan warna

5 Simpan output: Kod pengesahan semuanya dikeluarkan

6. Keluarkan sumber

4. Kod pengesahan bahasa Cina
//制作验证码图片

//获取验证码字符串
$captcha = '';
for($i = 0;$i < 4;$i++){
    //chr: 将数字转换成对应的字符(ASCII)
    switch(mt_rand(0,2)){
        case 0: //数字
            $captcha .= chr(mt_rand(49,57));
            break;
        case 1:    //大写字母
            $captcha .= chr(mt_rand(65,90));
            break;
        case 2: //小写字母
            $captcha .= chr(mt_rand(97,122));
            break;
    }
}
//echo $captcha;

//创建画布
$img = imagecreatetruecolor(200,200);

//给背景分配颜色
$bg = imagecolorallocate($img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));

//填充背景色
imagefill($img,0,0,$bg);

//循环写入
for($i = 0;$i < 4;$i++){
    //分配文字颜色
    $txt = imagecolorallocate($img,mt_rand(50,150),mt_rand(50,150),mt_rand(50,150));

    //写入文字
    imagestring($img,mt_rand(1,5),60 + $i*20,90,$captcha[$i],$txt);
}

//输出
header(&#39;Content-type:image/png&#39;);
imagepng($img);

//释放资源
imagedestroy($img);
Salin selepas log masuk

Dua perkara yang perlu diberi perhatian

Dapatkan bahasa Cina rawak: Dalam PHP, data dikendalikan dalam bait bahasa Cina mempunyai bilangan bait yang berbeza dalam set aksara yang berbeza

Fungsi tulisan Cina: imagettftext(sumber imej, saiz fon, putaran fon. sudut, bermula X fon , fon mula Y, fail fon, kandungan, warna);

1 Cipta kanvas: isi dengan warna latar belakang

2 >3. Tulis Bahasa Cina Masukkan imej

4. Simpan imej output

5. Musnahkan sumber

5. Kelas kod pengesahan enkapsulasi

//中文验证码
header(&#39;Content-type:text/html;charset=utf-8&#39;);

//创建画布
$img = imagecreatetruecolor(200,200);
//给背景分配颜色
$bg = imagecolorallocate($img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
//填充背景色
imagefill($img,0,0,$bg);

//写入内容
for($i = 0;$i < 4;$i++){
    //分配颜色
    $txt = imagecolorallocate($img,mt_rand(50,150),mt_rand(50,150),mt_rand(50,150));

    //获取随机中文
    $string = "今天我寒夜里看雪飘过怀着冷却了的心窝飘远方";
    
    $pos = mt_rand(0,strlen($string) - 1);
    $start = $pos - $pos % 3;        //utf-8取模3,GBK取模2

    //取三个长度(字符串截取)
    $target = substr($string,$start,3);

    //写入中文
    imagettftext($img,mt_rand(20,40),mt_rand(-45,45),40 + $i * 30, mt_rand(80,120),$txt,&#39;simple.ttf&#39;,$target);

}

//输出图片
header(&#39;Content-type:image/png&#39;);
imagepng($img);

//销毁资源
imagedestroy($img);
Salin selepas log masuk
Pembelajaran yang disyorkan :《

Tutorial video PHP

//验证码工具类

class Captcha{
    //属性
    private $width;
    private $height;
    private $strlen;
    private $lines;     //干扰线数量
    private $stars;     //干扰点数量
    private $font;      //字体路径

    //构造方法:初始化属性
    public function __construct($info = array()){
        //初始化属性
        $this->width    = isset($info[&#39;width&#39;])?$info[&#39;width&#39;]:146;
        $this->height    = isset($info[&#39;height&#39;])?$info[&#39;height&#39;]:23;
        $this->strlen    = isset($info[&#39;strlen&#39;])?$info[&#39;strlen&#39;]:4;
        $this->lines    = isset($info[&#39;lines&#39;])?$info[&#39;lines&#39;]:10;
        $this->stars    = isset($info[&#39;stars&#39;])?$info[&#39;stars&#39;]:50;
        $this->font        = isset($info[&#39;font&#39;])?$info[&#39;font&#39;]:&#39;fonts/AxureHandwriting-BoldItalic.otf&#39;;
    }

    //生成验证码图片
    public function generate(){
        //创建画布,给定背景色
        $img = imagecreatetruecolor($this->width,$this->height);
        $c_bg = imagecolorallocate($img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
        imagefill($img,0,0,$c_bg);

        //写入字符串
        $captcha = $this->getStr();
        
        //增加干扰点"*"
        for($i = 0;$i < $this->stars;$i++){
            //随机颜色
            $c_star = imagecolorallocate($img,mt_rand(100,150),mt_rand(100,150),mt_rand(100,150));

            //写入*号
            imagestring($img,mt_rand(1,5),mt_rand(0,$this->width),mt_rand(0,$this->height),&#39;*&#39;,$c_star);
        }

        //增加干扰线
        for($i = 0;$i < $this->lines;$i++){
            //随机颜色
            $c_line = imagecolorallocate($img,mt_rand(150,200),mt_rand(150,200),mt_rand(150,200));

            //划线
            imageline($img,mt_rand(0,$this->width),mt_rand(0,$this->height),mt_rand(0,$this->width),mt_rand(0,$this->height),$c_line);
        }

        //随机颜色
        for($i = 0;$i < $this->strlen;$i++){
            $c_str = imagecolorallocate($img,mt_rand(0,100),mt_rand(0,100),mt_rand(0,100));
            imagettftext($img,mt_rand(10,20),mt_rand(-45,45),20 + $i * 30,mt_rand(14,$this->height - 6),$c_str,$this->font,$captcha[$i]);

        }
        
        //输出图片
        header(&#39;Content-type:image/png&#39;);
        imagepng($img);

        //释放资源
        imagedestroy($img);
    }

    //获取随机字符串
    //@return 字符串
    private function getStr(){
        //ASCII码表生成字符串
        $str = &#39;&#39;;

        //循环生成
        for($i = 0;$i < $this->strlen;$i++){
            //随机选择数字,小写字母和大写字母
            switch(mt_rand(0,2)){
                case 0: //数字
                    $str .= chr(mt_rand(49,57));
                    break;
                case 1: //小写字母
                    $str .= chr(mt_rand(97,122));
                    break;
                case 2: //大写字母
                    $str .= chr(mt_rand(65,90));
                    break;
            }
        }

        //将验证码字符串保存到session
        $_SESSION[&#39;captcha&#39;] = $str;

        //返回结果
        return $str;
    }

    /*
     * 验证验证码
     * @param1 string $captcha,用户输入的验证码数据
     * @return boolean,成功返回true,失败返回false
     */
    public static function checkCaptcha($captcha){
        //与session中的验证码进行验证

        //验证码不区分大小写
        return (strtoupper($captcha) === strtoupper($_SESSION[&#39;captcha&#39;]));
    }

}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan kod pengesahan imej dalam php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
php
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan