s1syphos / php-simple-captcha
简单的验证码生成器
Requires
- php: ^8.0
- ext-gd: *
- ext-mbstring: *
Requires (Dev)
- laravel/pint: ^1.4
- mikey179/vfsstream: ^1.6
- phpunit/phpunit: ^9.5
- vimeo/psalm: ^5.6
Suggests
- thiagoalessio/tesseract_ocr: Provides better results when building against OCR. Requires 'tesseract-ocr' to be installed.
This package is auto-updated.
Last update: 2024-09-06 14:53:26 UTC
README
php-simple-captcha
创建并验证验证码图像,无需依赖,并尊重用户的隐私。它是 Gregwar/Captcha
的分支,但支持现代的 PHP 版本,并包含一些新功能和错误修复。
安装
它适用于 Composer
composer require s1syphos/php-simple-captcha
入门指南
当调用主类时,您可以指定一个短语(隐藏在验证码图像中的字符串),否则将随机创建一个
<?php require_once('vendor/autoload.php'); use SimpleCaptcha\Builder; # First, you have to instantiate it .. # (1) .. either this way .. $builder = new Builder; # (2) .. or this way $builder = Builder::create(); # Now, building a captcha is easy $builder->build();
如果您希望生成的短语更加随机,buildPhrase()
可以帮助您实现
# Create random phrase .. # (1) .. consisting of 32 characters # (2) .. being randomly chosen from 'abc@123' $phrase = Builder::buildPhrase(32, 'abc@123'); # Now proceed like above .. # (1) .. either this way .. $builder = new Builder($phrase); # (2) .. or this way $builder = Builder::create($phrase);
从这里,您可以...
(1) .. 将验证码保存到文件
$builder->save('out.jpg'); # GIF & PNG are also supported, so this works too: $builder->save('out.png'); $builder->save('out.gif'); # Optionally, quality may be specified: # - JPG: 0-100 # - PNG: 0-9 $builder->save('low-quality.jpg', 40);
(2) .. 直接在浏览器中输出
# Default: JPG & 90 $builder->output(); # .. but how about .. $builder->output(6, 'png');
(3) .. 在您的 HTML 中内联其数据 URI
<img src="<?= $builder->inline() ?>" />
您将能够获取代码并与用户输入进行比较
# Example: storing the phrase in the session to test for the user input later $_SESSION['phrase'] = $builder->phrase;
注意:由于随机选择的字体中可能包含看起来非常相似的字母,您应使用 compare()
验证用户输入,否则您可能会得到无法解决的验证码
if ($builder->compare($input)) { # Valid phrase } else { # Invalid phrase }
用法
从那里,以下函数可用
randomCharacter(string $charset = null): string
随机选择字符(使用给定的字符集)
buildPhrase(int $length = 5, string $charset = null): string
构建随机短语(给定长度使用给定字符集)
build(int $width = 150, int $height = 40): self
构建验证码图像
buildAgainstOCR(int $width = 150, int $height = 40): self
构建验证码图像,直到它(理论上)无法被 OCR 软件读取
save(string $filename, int $quality = 90): void
将验证码图像保存到文件
output(int $quality = 90, string $type = 'jpg'): void
直接输出验证码图像
fetch(int $quality = 90, string $type = 'jpg'): string
获取验证码图像内容
inline(int $quality = 90, string $type = 'jpg'): string
获取验证码图像作为数据 URI
compare(string $phrase, string $string = null): bool
检查验证码是否正确解决。传递另一个字符串后,将比较两个字符串(而不是第一个字符串和当前短语)。
配置
您可以使用以下设置来更改库的行为
$builder->phrase (string)
验证码短语。默认:随机,见 buildPhrase()
$builder->fonts (array)
验证码字体路径。默认:位于 fonts
内的字体文件
$builder->distort (bool)
是否扭曲图像。默认:true
$builder->interpolate (bool)
是否插值图像。默认:true
$builder->maxLinesBehind (int)
验证码短语后面的最大行数。默认:随机
$builder->maxLinesFront (int)
验证码短语前面的最大行数。默认:随机
$builder->maxAngle (int)
最大字符角度。默认:8
$builder->maxOffset (int)
最大字符偏移量。默认:5
$builder->bgColor (array|string)
背景颜色,可以是 RGB 值(数组)、十六进制值或 'transparent'
(字符串)。默认:随机
$builder->lineColor (array|string)
线条颜色 RGB 值(数组)或十六进制值(字符串)
$builder->textColor (array|string)
文本颜色 RGB 值(数组)或十六进制值(字符串)
$builder->bgImage (string)
背景图像路径。默认:背景填充,见 bgColor
$builder->applyEffects (bool)
是否应用任何效果。默认:true
$builder->applyNoise (bool)
是否应用背景噪音(使用随机字母)。默认:true
$builder->noiseFactor (int)
用于噪音生成的短语长度的倍数。默认:2
$builder->applyPostEffects (bool)
是否应用后处理效果。默认:true
$builder->applyScatterEffect (bool)
是否启用散点效果。默认:true
$builder->randomizeFonts (bool)
是否为每个符号使用随机字体。默认:true
示例
查看demo
文件夹内的示例,应该可以给您一个可能的印象 - 或者简单地设置一个PHP开发服务器
# Change directory cd demo # Launch server php -S localhost:3000 # All examples are now available in your browser, eg 'https://:3000/ocr.php'
字体
fonts
目录包括
- Bitter(许可协议:OFL)
- Gidole(许可协议:MIT)
- Hack(许可协议:MIT)
- Linux Libertine(许可协议:OFL)
- TGL 0-17(许可协议:OFL)
- Vollkorn(许可协议:OFL)
致谢
此库基于 Gregwar/Captcha
,引入了几个新功能和错误修复。