选择语言 :

 Core_Captcha::render

render image

image Core_Captcha::render( [ array $config = bool false ] )

参数列表

参数 类型 描述 默认值
$config array $config bool false
返回值
  • image
File: ./core/classes/captcha.class.php
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();
}