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.
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 .
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
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)
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);
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('Content-type:image/png'); imagepng($img); //释放资源 imagedestroy($img);
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('Content-type:text/html;charset=utf-8'); //创建画布 $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,'simple.ttf',$target); } //输出图片 header('Content-type:image/png'); imagepng($img); //销毁资源 imagedestroy($img);
//验证码工具类 class Captcha{ //属性 private $width; private $height; private $strlen; private $lines; //干扰线数量 private $stars; //干扰点数量 private $font; //字体路径 //构造方法:初始化属性 public function __construct($info = array()){ //初始化属性 $this->width = isset($info['width'])?$info['width']:146; $this->height = isset($info['height'])?$info['height']:23; $this->strlen = isset($info['strlen'])?$info['strlen']:4; $this->lines = isset($info['lines'])?$info['lines']:10; $this->stars = isset($info['stars'])?$info['stars']:50; $this->font = isset($info['font'])?$info['font']:'fonts/AxureHandwriting-BoldItalic.otf'; } //生成验证码图片 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),'*',$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('Content-type:image/png'); imagepng($img); //释放资源 imagedestroy($img); } //获取随机字符串 //@return 字符串 private function getStr(){ //ASCII码表生成字符串 $str = ''; //循环生成 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['captcha'] = $str; //返回结果 return $str; } /* * 验证验证码 * @param1 string $captcha,用户输入的验证码数据 * @return boolean,成功返回true,失败返回false */ public static function checkCaptcha($captcha){ //与session中的验证码进行验证 //验证码不区分大小写 return (strtoupper($captcha) === strtoupper($_SESSION['captcha'])); } }
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!