Codeignifier captcha helper does not increase font size of text

It seems that the question of duplication is of some kind, but it is not. I ask the following:

  • Does the encoder assistant help to increase the font size? even if i passed the next array parameter it doesn't seem to change.

    'font_size' => 36

2. The font used has the following font sizes, but the quote size does not change

enter image description here

So what's up?

/* Setup config to pass into the create_captcha function */
                $capache_config = array(
                    'img_path' => 'captcha/',
                    'img_url' => base_url() . 'captcha/',
                    'img_width' => '150',
                    'font_path' => base_url() . 'captcha/font/captcha4.ttf',
                    'img_height' => 40,
                    'expiration' => 7200
                );

                /* Generate the captcha */
                $captcha = create_captcha($capache_config);

      

But I can't increase the size even if I increase the width or height? What do you know about this?

enter image description here

+3


source to share


2 answers


A simple solution:)

1.Photo file yourapplication

system

- helpers

captcha_helper.php

2. Find the next line and apply the change the way you want. If we change the font size of the default captcha.

NB. You can move the entier file to your application / core and the file suffix using MY.

$ font_size = 28; // edited font to modify captcha size

   // -----------------------------------
    //  Write the text
    // -----------------------------------

    $use_font = ($font_path != '' AND file_exists($font_path) AND function_exists('imagettftext')) ? TRUE : FALSE;

    if ($use_font == FALSE)
    {
        $font_size = 5;
        $x = rand(0, $img_width/($length/3));
        $y = 0;
    }
    else
    {
        $font_size  = 28; //edited font for captcha size
        $x = rand(0, $img_width/($length/1.5));
        $y = $font_size+2;
    }

      



3.Clear the trap in the testing browser 4. Modify the helper configuration on your controller or elsewhere like FCPATH IS A MUST Thanks machineaddict !

 $capache_config = array(
                'img_path' => 'captcha/',
                'img_url' => base_url() . 'captcha/',
                'img_width' => '290',
                'font_path' => FCPATH . 'captcha/font/captcha4.ttf',
                'img_height' => 65,
                'expiration' => 7200
            );

      

Expected Result:

enter image description here

BANG BANG I HIT THE EARTH !!!!

+1


source


Codeigniter captcha helper does not allow changing font size. The following will replace the default function create_captcha

and allow you to change the font size. The version of CodeIgniter I was using is 2.2.0. This is working / tested code.

Step 1: Create a new helper file named MY_captcha_helper.php

and save it in the root of your CodeIgniter folder in application/helper

. File contents:

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
 * CodeIgniter
 *
 * An open source application development framework for PHP 5.1.6 or newer
 *
 * @package     CodeIgniter
 * @author      ExpressionEngine Dev Team
 * @copyright   Copyright (c) 2008 - 2014, EllisLab, Inc.
 * @license     http://codeigniter.com/user_guide/license.html
 * @link        http://codeigniter.com
 * @since       Version 1.0
 * @filesource
 */

// ------------------------------------------------------------------------

/**
 * CodeIgniter CAPTCHA Helper
 *
 * @package     CodeIgniter
 * @subpackage  Helpers
 * @category    Helpers
 * @author      ExpressionEngine Dev Team
 * @link        http://codeigniter.com/user_guide/helpers/xml_helper.html
 */

// ------------------------------------------------------------------------

/**
 * Create CAPTCHA
 *
 * @access  public
 * @param   array   array of data for the CAPTCHA
 * @param   string  path to create the image in
 * @param   string  URL to the CAPTCHA image folder
 * @param   string  server path to font
 * @return  string
 */
if ( ! function_exists('create_captcha'))
{
    function create_captcha($data = '', $img_path = '', $img_url = '', $font_path = '')
    {
        $defaults = array('word' => '', 'img_path' => '', 'img_url' => '', 'img_width' => '150', 'img_height' => '30', 'font_path' => '', 'expiration' => 7200, 'font_size' => 5);

        foreach ($defaults as $key => $val)
        {
            if ( ! is_array($data))
            {
                if ( ! isset($$key) OR $$key == '')
                {
                    $$key = $val;
                }
            }
            else
            {
                $$key = ( ! isset($data[$key])) ? $val : $data[$key];
            }
        }

        if ($img_path == '' OR $img_url == '')
        {
            return FALSE;
        }

        if ( ! @is_dir($img_path))
        {
            return FALSE;
        }

        if ( ! is_writable($img_path))
        {
            return FALSE;
        }

        if ( ! extension_loaded('gd'))
        {
            return FALSE;
        }

        // -----------------------------------
        // Remove old images
        // -----------------------------------

        list($usec, $sec) = explode(" ", microtime());
        $now = ((float)$usec + (float)$sec);

        $current_dir = @opendir($img_path);

        while ($filename = @readdir($current_dir))
        {
            if ($filename != "." and $filename != ".." and $filename != "index.html")
            {
                $name = str_replace(".jpg", "", $filename);

                if (($name + $expiration) < $now)
                {
                    @unlink($img_path.$filename);
                }
            }
        }

        @closedir($current_dir);

        // -----------------------------------
        // Do we have a "word" yet?
        // -----------------------------------

       if ($word == '')
       {
            $pool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

            $str = '';
            for ($i = 0; $i < 8; $i++)
            {
                $str .= substr($pool, mt_rand(0, strlen($pool) -1), 1);
            }

            $word = $str;
       }

        // -----------------------------------
        // Determine angle and position
        // -----------------------------------

        $length = strlen($word);
        $angle  = ($length >= 6) ? rand(-($length-6), ($length-6)) : 0;
        $x_axis = rand(6, (360/$length)-16);
        $y_axis = ($angle >= 0 ) ? rand($img_height, $img_width) : rand(6, $img_height);

        // -----------------------------------
        // Create image
        // -----------------------------------

        // PHP.net recommends imagecreatetruecolor(), but it isn't always available
        if (function_exists('imagecreatetruecolor'))
        {
            $im = imagecreatetruecolor($img_width, $img_height);
        }
        else
        {
            $im = imagecreate($img_width, $img_height);
        }

        // -----------------------------------
        //  Assign colors
        // -----------------------------------

        $bg_color       = imagecolorallocate ($im, 255, 255, 255);
        $border_color   = imagecolorallocate ($im, 153, 102, 102);
        $text_color     = imagecolorallocate ($im, 204, 153, 153);
        $grid_color     = imagecolorallocate($im, 255, 182, 182);
        $shadow_color   = imagecolorallocate($im, 255, 240, 240);

        // -----------------------------------
        //  Create the rectangle
        // -----------------------------------

        ImageFilledRectangle($im, 0, 0, $img_width, $img_height, $bg_color);

        // -----------------------------------
        //  Create the spiral pattern
        // -----------------------------------

        $theta      = 1;
        $thetac     = 7;
        $radius     = 16;
        $circles    = 20;
        $points     = 32;

        for ($i = 0; $i < ($circles * $points) - 1; $i++)
        {
            $theta = $theta + $thetac;
            $rad = $radius * ($i / $points );
            $x = ($rad * cos($theta)) + $x_axis;
            $y = ($rad * sin($theta)) + $y_axis;
            $theta = $theta + $thetac;
            $rad1 = $radius * (($i + 1) / $points);
            $x1 = ($rad1 * cos($theta)) + $x_axis;
            $y1 = ($rad1 * sin($theta )) + $y_axis;
            imageline($im, $x, $y, $x1, $y1, $grid_color);
            $theta = $theta - $thetac;
        }

        // -----------------------------------
        //  Write the text
        // -----------------------------------

        $use_font = ($font_path != '' AND file_exists($font_path) AND function_exists('imagettftext')) ? TRUE : FALSE;

        if ($use_font == FALSE)
        {
            $font_size = $font_size != 5 ? $font_size : 5;
            $x = rand(0, $img_width/($length/3));
            $y = 0;
        }
        else
        {
            $font_size = $font_size != 5 ? $font_size : 16;
            $x = rand(0, $img_width/($length/1.5));
            $y = $font_size+2;
        }

        for ($i = 0; $i < strlen($word); $i++)
        {
            if ($use_font == FALSE)
            {
                $y = rand(0 , $img_height/2);
                imagestring($im, $font_size, $x, $y, substr($word, $i, 1), $text_color);
                $x += ($font_size*2);
            }
            else
            {
                $y = rand($img_height/2, $img_height-3);
                imagettftext($im, $font_size, $angle, $x, $y, $text_color, $font_path, substr($word, $i, 1));
                $x += $font_size;
            }
        }


        // -----------------------------------
        //  Create the border
        // -----------------------------------

        imagerectangle($im, 0, 0, $img_width-1, $img_height-1, $border_color);

        // -----------------------------------
        //  Generate the image
        // -----------------------------------

        $img_name = $now.'.jpg';

        ImageJPEG($im, $img_path.$img_name);

        $img = "<img src=\"$img_url$img_name\" width=\"$img_width\" height=\"$img_height\" style=\"border:0;\" alt=\" \" />";

        ImageDestroy($im);

        return array('word' => $word, 'time' => $now, 'image' => $img);
    }
}

// ------------------------------------------------------------------------

/* End of file captcha_helper.php */
/* Location: ./system/heleprs/captcha_helper.php */

      

I changed:

this is

$defaults = array('word' => '', 'img_path' => '', 'img_url' => '', 'img_width' => '150', 'img_height' => '30', 'font_path' => '', 'expiration' => 7200);

      

in that

$defaults = array('word' => '', 'img_path' => '', 'img_url' => '', 'img_width' => '150', 'img_height' => '30', 'font_path' => '', 'expiration' => 7200, 'font_size' => 5);

      

and this one



if ($use_font == FALSE)
{
    $font_size = 5;
    $x = rand(0, $img_width/($length/3));
    $y = 0;
}
else
{
    $font_size = 16;
    $x = rand(0, $img_width/($length/1.5));
    $y = $font_size+2;
}

      

in that

if ($use_font == FALSE)
{
    $font_size = $font_size != 5 ? $font_size : 5;
    $x = rand(0, $img_width/($length/3));
    $y = 0;
}
else
{
    $font_size = $font_size != 5 ? $font_size : 16;
    $x = rand(0, $img_width/($length/1.5));
    $y = $font_size+2;
}

      

Step 2: Create a folder named captcha

at the root of your CodeIgniter folder (you probably already have one) and give it 755 permissions under the current apache user / group.

Step 3: Save your .ttf custom fonts under captcha/fonts

.

Step 4: Your controller code:

$this->load->helper('captcha');

$capache_config = array(
    'img_path' => 'captcha/',
    'img_url' => base_url() . 'captcha/',
    'img_width' => 190,
    'img_height' => 60,
    'font_size' => 20,
    'font_path' => FCPATH. 'captcha/font/verdana.ttf',
    'expiration' => 7200
);

/* Generate the captcha */
$captcha = create_captcha($capache_config);

if ($captcha !== FALSE) {
    echo $captcha['image'];
} else {
    die('No captcha was created');
}

      

Step 5: Example output:

captcha file

+5


source







All Articles