New upstream version 0.6.27
This commit is contained in:
@@ -1,4 +1,12 @@
|
||||
<?php defined('SYSPATH') OR die('No direct access allowed.');
|
||||
<?php
|
||||
|
||||
// phpcs:disable PSR1.Classes.ClassDeclaration.MissingNamespace
|
||||
// phpcs:disable PSR1.Files.SideEffects
|
||||
defined('SYSPATH') or die('No direct access allowed.');
|
||||
// phpcs:enable PSR1.Files.SideEffects
|
||||
// phpcs:disable Squiz.Classes.ValidClassName.NotCamelCaps
|
||||
|
||||
|
||||
/**
|
||||
* Captcha driver for "basic" style.
|
||||
*
|
||||
@@ -9,73 +17,70 @@
|
||||
* @copyright (c) 2007-2008 Kohana Team
|
||||
* @license http://kohanaphp.com/license.html
|
||||
*/
|
||||
class Captcha_Basic_Driver extends Captcha_Driver {
|
||||
class Captcha_Basic_Driver extends Captcha_Driver
|
||||
{
|
||||
/**
|
||||
* Generates a new Captcha challenge.
|
||||
*
|
||||
* @return string the challenge answer
|
||||
*/
|
||||
public function generate_challenge()
|
||||
{
|
||||
// Complexity setting is used as character count
|
||||
return text::random('distinct', max(1, Captcha::$config['complexity']));
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a new Captcha challenge.
|
||||
*
|
||||
* @return string the challenge answer
|
||||
*/
|
||||
public function generate_challenge()
|
||||
{
|
||||
// Complexity setting is used as character count
|
||||
return text::random('distinct', max(1, Captcha::$config['complexity']));
|
||||
}
|
||||
/**
|
||||
* Outputs the Captcha image.
|
||||
*
|
||||
* @param boolean html output
|
||||
* @return mixed
|
||||
*/
|
||||
public function render($html)
|
||||
{
|
||||
// Creates $this->image
|
||||
$this->image_create(Captcha::$config['background']);
|
||||
|
||||
/**
|
||||
* Outputs the Captcha image.
|
||||
*
|
||||
* @param boolean html output
|
||||
* @return mixed
|
||||
*/
|
||||
public function render($html)
|
||||
{
|
||||
// Creates $this->image
|
||||
$this->image_create(Captcha::$config['background']);
|
||||
// Add a random gradient
|
||||
if (empty(Captcha::$config['background'])) {
|
||||
$color1 = imagecolorallocate($this->image, mt_rand(200, 255), mt_rand(200, 255), mt_rand(150, 255));
|
||||
$color2 = imagecolorallocate($this->image, mt_rand(200, 255), mt_rand(200, 255), mt_rand(150, 255));
|
||||
$this->image_gradient($color1, $color2);
|
||||
}
|
||||
|
||||
// Add a random gradient
|
||||
if (empty(Captcha::$config['background']))
|
||||
{
|
||||
$color1 = imagecolorallocate($this->image, mt_rand(200, 255), mt_rand(200, 255), mt_rand(150, 255));
|
||||
$color2 = imagecolorallocate($this->image, mt_rand(200, 255), mt_rand(200, 255), mt_rand(150, 255));
|
||||
$this->image_gradient($color1, $color2);
|
||||
}
|
||||
// Add a few random lines
|
||||
for ($i = 0, $count = mt_rand(5, Captcha::$config['complexity'] * 4); $i < $count; $i++) {
|
||||
$color = imagecolorallocatealpha($this->image, mt_rand(0, 255), mt_rand(0, 255), mt_rand(100, 255), mt_rand(50, 120));
|
||||
imageline($this->image, mt_rand(0, Captcha::$config['width']), 0, mt_rand(0, Captcha::$config['width']), Captcha::$config['height'], $color);
|
||||
}
|
||||
|
||||
// Add a few random lines
|
||||
for ($i = 0, $count = mt_rand(5, Captcha::$config['complexity'] * 4); $i < $count; $i++)
|
||||
{
|
||||
$color = imagecolorallocatealpha($this->image, mt_rand(0, 255), mt_rand(0, 255), mt_rand(100, 255), mt_rand(50, 120));
|
||||
imageline($this->image, mt_rand(0, Captcha::$config['width']), 0, mt_rand(0, Captcha::$config['width']), Captcha::$config['height'], $color);
|
||||
}
|
||||
// Calculate character font-size and spacing
|
||||
$default_size = min(Captcha::$config['width'], Captcha::$config['height'] * 2) / (strlen($this->response) + 1);
|
||||
$spacing = (int) (Captcha::$config['width'] * 0.9 / strlen($this->response));
|
||||
|
||||
// Calculate character font-size and spacing
|
||||
$default_size = min(Captcha::$config['width'], Captcha::$config['height'] * 2) / (strlen($this->response) + 1);
|
||||
$spacing = (int) (Captcha::$config['width'] * 0.9 / strlen($this->response));
|
||||
// Draw each Captcha character with varying attributes
|
||||
for ($i = 0, $strlen = strlen($this->response); $i < $strlen; $i++) {
|
||||
// Use different fonts if available
|
||||
$font = Captcha::$config['fontpath'] . Captcha::$config['fonts'][array_rand(Captcha::$config['fonts'])];
|
||||
|
||||
// Draw each Captcha character with varying attributes
|
||||
for ($i = 0, $strlen = strlen($this->response); $i < $strlen; $i++)
|
||||
{
|
||||
// Use different fonts if available
|
||||
$font = Captcha::$config['fontpath'].Captcha::$config['fonts'][array_rand(Captcha::$config['fonts'])];
|
||||
// Allocate random color, size and rotation attributes to text
|
||||
$color = imagecolorallocate($this->image, mt_rand(0, 150), mt_rand(0, 150), mt_rand(0, 150));
|
||||
$angle = mt_rand(-40, 20);
|
||||
|
||||
// Allocate random color, size and rotation attributes to text
|
||||
$color = imagecolorallocate($this->image, mt_rand(0, 150), mt_rand(0, 150), mt_rand(0, 150));
|
||||
$angle = mt_rand(-40, 20);
|
||||
// Scale the character size on image height
|
||||
$size = $default_size / 10 * mt_rand(8, 12);
|
||||
$box = imageftbbox($size, $angle, $font, $this->response[$i]);
|
||||
|
||||
// Scale the character size on image height
|
||||
$size = $default_size / 10 * mt_rand(8, 12);
|
||||
$box = imageftbbox($size, $angle, $font, $this->response[$i]);
|
||||
// Calculate character starting coordinates
|
||||
$x = $spacing / 4 + $i * $spacing;
|
||||
$y = Captcha::$config['height'] / 2 + ($box[2] - $box[5]) / 4;
|
||||
|
||||
// Calculate character starting coordinates
|
||||
$x = $spacing / 4 + $i * $spacing;
|
||||
$y = Captcha::$config['height'] / 2 + ($box[2] - $box[5]) / 4;
|
||||
// Write text character to image
|
||||
imagefttext($this->image, $size, $angle, $x, $y, $color, $font, $this->response[$i]);
|
||||
}
|
||||
|
||||
// Write text character to image
|
||||
imagefttext($this->image, $size, $angle, $x, $y, $color, $font, $this->response[$i]);
|
||||
}
|
||||
|
||||
// Output
|
||||
return $this->image_render($html);
|
||||
}
|
||||
|
||||
} // End Captcha Basic Driver Class
|
||||
// Output
|
||||
return $this->image_render($html);
|
||||
}
|
||||
}
|
||||
// End Captcha Basic Driver Class
|
||||
|
||||
Reference in New Issue
Block a user