render image
image Core_Captcha::render( [ array $config = bool false ] )
参数列表
参数 类型 描述 默认值 $config
array
$config bool false
image
public static function render($config = false)
{
if (is_array($config))
{
Captcha::$config = array_merge(Captcha::$config, $config);
}
if (empty(Captcha::$response))
{
Captcha::generate_challenge();
}
// Creates Captcha::$image
Captcha::image_create(Captcha::$config['background']);
// Add a random gradient
if ( empty(Captcha::$config['background']) )
{
$color1 = imagecolorallocate(Captcha::$image, mt_rand(0, 100), mt_rand(0, 100), mt_rand(0, 100));
$color2 = imagecolorallocate(Captcha::$image, mt_rand(0, 100), mt_rand(0, 100), mt_rand(0, 100));
Captcha::image_gradient($color1, $color2);
}
// Add a few random circles
for( $i = 0, $count = mt_rand(10, Captcha::$config['complexity'] * 3); $i < $count; $i ++ )
{
$color = imagecolorallocatealpha(Captcha::$image, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255), mt_rand(80, 120));
$size = mt_rand(5, Captcha::$config['height'] / 3);
imagefilledellipse(Captcha::$image, mt_rand(0, Captcha::$config['width']), mt_rand(0, Captcha::$config['height']), $size, $size, $color);
}
// Calculate character font-size and spacing
$default_size = min(Captcha::$config['width'], Captcha::$config['height'] * 2) / strlen(Captcha::$response);
$spacing = (int)(Captcha::$config['width'] * 0.9 / strlen(Captcha::$response));
// Background alphabetic character attributes
$color_limit = mt_rand(96, 160);
$chars = 'ABEFGJKLPQRTVY';
// Draw each captcha character with varying attributes
for( $i = 0, $strlen = strlen(Captcha::$response); $i < $strlen; $i ++ )
{
// Use different fonts if available
$font = Core::find_file('data',Captcha::$config['fonts'][array_rand(Captcha::$config['fonts'])],false);
$angle = mt_rand(- 40, 20);
// Scale the character size on image height
$size = $default_size / 10 * mt_rand(8, 12);
if ( !function_exists('imageftbbox') ) Core::show_500(__('function imageftbbox not exist.'));
$box = imageftbbox($size, $angle, $font, Captcha::$response[$i]);
// Calculate character starting coordinates
$x = $spacing / 4 + $i * $spacing;
$y = Captcha::$config['height'] / 2 + ($box[2] - $box[5]) / 4;
// Draw captcha text character
// Allocate random color, size and rotation attributes to text
$color = imagecolorallocate(Captcha::$image, mt_rand(150, 255), mt_rand(200, 255), mt_rand(0, 255));
// Write text character to image
imagefttext(Captcha::$image, $size, $angle, $x, $y, $color, $font, Captcha::$response[$i]);
// Draw "ghost" alphabetic character
$text_color = imagecolorallocatealpha(Captcha::$image, mt_rand($color_limit + 8, 255), mt_rand($color_limit + 8, 255), mt_rand($color_limit + 8, 255), mt_rand(70, 120));
$char = substr($chars, mt_rand(0, 14), 1);
imagettftext(Captcha::$image, $size * 1.4, mt_rand(- 45, 45), ($x - (mt_rand(5, 10))), ($y + (mt_rand(5, 10))), $text_color, $font, $char);
}
// Output
return Captcha::image_render();
}