mirror of
https://github.com/Pathduck/gallery3.git
synced 2026-05-20 19:39:16 -04:00
Rename 'kohana' to 'system' to conform to the Kohana filesystem layout. I'm comfortable with us not clearly drawing the distinction about the fact that it's Kohana.
This commit is contained in:
81
system/libraries/drivers/Captcha/Basic.php
Normal file
81
system/libraries/drivers/Captcha/Basic.php
Normal file
@@ -0,0 +1,81 @@
|
||||
<?php defined('SYSPATH') OR die('No direct access allowed.');
|
||||
/**
|
||||
* Captcha driver for "basic" style.
|
||||
*
|
||||
* $Id: Basic.php 3769 2008-12-15 00:48:56Z zombor $
|
||||
*
|
||||
* @package Captcha
|
||||
* @author Kohana Team
|
||||
* @copyright (c) 2007-2008 Kohana Team
|
||||
* @license http://kohanaphp.com/license.html
|
||||
*/
|
||||
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']));
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 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));
|
||||
|
||||
// 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);
|
||||
|
||||
// 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;
|
||||
|
||||
// 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
|
||||
Reference in New Issue
Block a user